Symfony ManyToMany Problem

0

symfony 6

Relacja ManyToMany tworzona poprzez
bin/console make:entity

Problem leży w tym, że symfony tworzy błędne indexy.

Mam dwie relacje ManyToMany

namespace App\Entity;

class Faktura
{
   #[ORM\ManyToMany(targetEntity: FakturaWiersz::class, cascade:["persist", "remove"])]
    private Collection $wiersze;

    #[ORM\ManyToMany(targetEntity: PodsumowanieFakturyZaliczka::class, cascade:["persist", "remove"])]
    private Collection $zaliczki;

problem jest z drugą.

Indeksy 1
Działanie Nazwa klucza Typ Jednoznaczny Spakowany Kolumna Moc Metoda porównywania napisów Null Komentarz
Edytuj Edytuj Zmień nazwę Zmień nazwę Usuń Usuń PRIMARY BTREE Tak Nie faktura_id 48 A Nie
faktura_wiersz_id 48 A Nie
Edytuj Edytuj Zmień nazwę Zmień nazwę Usuń Usuń IDX_E2EA755A23AA62EA BTREE Nie Nie faktura_id 48 A Nie
Edytuj Edytuj Zmień nazwę Zmień nazwę Usuń Usuń IDX_E2EA755AB4038AEE BTREE Nie Nie faktura_wiersz_id 48 A Nie

screenshot-20240410111832.png

Drugi
screenshot-20240410111918.png
Różnią się tylko nazwami i polem "Moc"

Przy dodawaniu nowej wartości w pierwszej relacji mam pole wyboru
screenshot-20240410112147.png
W przypadku drugiej realcji mam zwykłe pole do wpisania
screenshot-20240410112254.png

Mimo w zasadzie takich samych pól definicja bazy jest inna.
Oczywiście druga relacja nie zapisuje się

błąd Could not determine access type for property "zaliczki" in class "App\Entity\Faktura".

po dodaniu settera w nadrzędnej klasie (Faktura)

public function setZaliczki(Collection $zaliczki): static
    {
        $this->zaliczki = $zaliczki;
        
        return $this;
    }

nie ma błędu ale oczywiście nie zapisuje danych.

Z dziwnych rzeczy

Forma zdefiniowana:

->add('zaliczki', CollectionType::class, [
                    'entry_type' => PodsumowanieFakturyZaliczkaType::class,
                    'entry_options' => ['label' => false],
                    'by_reference' => false,
                    'allow_add' => true,
                    'allow_delete' => true,
                ])                
                ->add('wiersze', CollectionType::class, [
                    'entry_type' => FakturaWierszNewType::class,
                    'entry_options' => ['label' => false],
                    'by_reference' => false,
                    'allow_add' => true,
                    'allow_delete' => true,
                ])

Więc identyczne - poza nazwami

Pokazując formę widzę na niej rekord zaliczek
ale przy debugowaniu

if ($form->isSubmitted() && $form->isValid()) {
            echo " <pre> ";var_dump($form); echo " </pre> ";die;

widzę brak zaliczki.

["request"]=>
                            object(Symfony\Component\HttpFoundation\InputBag)#54 (1) {
                              ["parameters":protected]=>
                              array(1) {
                                ["faktura_new"]=>
                                  ["opis"]=>
                                  string(0) ""
                                  ["wiersze"]=>  <- wiersze są 
                                  array(1) {
                                    [0]=>
                                    array(8) {
                                      ["nazwa"]=>                                     

czyli tak jakby nie przesyłał w ogóle zaliczki.

Pytanie gdzie jest błąd i jak to naprawić.

0

W przypadku drugiej realcji mam zwykłe pole do wpisania

To nie jest zwykłe pole. Zwykłe pola nie mają obok linka "Przeglądaj zewnętrzne wartości". Indeks jest założony prawidłowo, ale strzelam, że tabela będąca celem klucza obcego jest pusta, dlatego nie ma tam dropki listującej wartości (bo nie ma żadnych wartości do wylistowania).

Sprawdź w kodzie, czy na pewno odpowiednie formularze *Type są podpięte do właściwych encji.
Zauważ, że dla wierszy masz FakturaWierszNewType i FakturaWiersz, tzn. formularz i encja różnią się cząstką New.
Dla zaliczek nie ma New, a może też powinno być?

1 użytkowników online, w tym zalogowanych: 0, gości: 1