mam dwie encje (dla uproszczenia wyciete rzeczy zbedne)
[/php]
[PHP]class Page { [...] /** * @ORM\OneToOne(targetEntity="Detail", mappedBy="page",cascade={"all"}) **/ private $detail; [...] public function setDetail(\Nede\MainBundle\Entity\Detail $detail = null) { $this->detail = $detail; $detail->setPage($this); return $this; }
class Detail { private $opis; /** * @ORM\OneToOne(targetEntity="Page", inversedBy="detail") * @ORM\JoinColumn(name="page_id", referencedColumnName="id") **/ private $page; public function setPage(\Nede\MainBundle\Entity\Page $page = null) { $this->page = $page; return $this; } }
Tabele wygladaja w nastepujacy sposob:
CREATE TABLE Detail (id INT AUTO_INCREMENT NOT NULL, page_id INT DEFAULT NULL, opis VARCHAR(255) NOT NULL, UNIQUE INDEX UNIQ_29AA7AA5C4663E4 (page_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB; CREATE TABLE Page (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB; ALTER TABLE Detail ADD CONSTRAINT FK_29AA7AA5C4663E4 FOREIGN KEY (page_id) REFERENCES Page (id);
W formularzu mam:
PageType { $builder ->add('name') ->add('detail',new DetailType()) ; }
Teraz dochodzac do sedna. Wszystko tak jak jest napisane dziala z jednym wyjatkiem...
Kiedy dane dla klasy Page i Detail sa uzupelnione wszystko dziala... ALE kiedy uzupelniam tylko tabele Page, bez Detail to pojawia sie blad z Insertem
czyli :
An exception occurred while executing 'INSERT INTO Detail (opis, page_id) VALUES (?, ?)' with params {"1":null,"2":null}:
Oczywiscie blad jest dla mnie zrozumialy, pytanie tylko JAK ZROBIC, zeby takie polecenie nigdy sie nie wykonywalo jesli w formularzu nie ma dla niego uzupelnionych danych ?