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
Drugi
Różnią się tylko nazwami i polem "Moc"
Przy dodawaniu nowej wartości w pierwszej relacji mam pole wyboru
W przypadku drugiej realcji mam zwykłe pole do wpisania
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ć.