Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF][Symfony2]
Forum PHP.pl > Forum > PHP > Frameworki
arturo23
Witam,

mam dwie encje (dla uproszczenia wyciete rzeczy zbedne)

  1. [PHP]class Page
  2. {
  3. [...]
  4. /**
  5. * @ORM\OneToOne(targetEntity="Detail", mappedBy="page",cascade={"all"})
  6. **/
  7. private $detail;
  8.  
  9. [...]
  10. public function setDetail(\Nede\MainBundle\Entity\Detail $detail = null)
  11. {
  12. $this->detail = $detail;
  13. $detail->setPage($this);
  14. return $this;
  15. }
[/php]

  1. class Detail
  2. {
  3. private $opis;
  4.  
  5. /**
  6. * @ORM\OneToOne(targetEntity="Page", inversedBy="detail")
  7. * @ORM\JoinColumn(name="page_id", referencedColumnName="id")
  8. **/
  9. private $page;
  10.  
  11. public function setPage(\Nede\MainBundle\Entity\Page $page = null)
  12. {
  13. $this->page = $page;
  14.  
  15. return $this;
  16. }
  17.  
  18. }


Tabele wygladaja w nastepujacy sposob:
  1. 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;
  2.  
  3. 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;
  4. ALTER TABLE Detail ADD CONSTRAINT FK_29AA7AA5C4663E4 FOREIGN KEY (page_id) REFERENCES Page (id);


W formularzu mam:
  1. PageType
  2.  
  3. public function buildForm(FormBuilderInterface $builder, array $options)
  4. {
  5. $builder
  6. ->add('name')
  7. ->add('detail',new DetailType())
  8. ;
  9. }


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 ?

ano
Wystarczy dodać walidację:

W Page.detail reguły:
- NotBlank/NotNull
- Valid - !koniecznie! zapewnienie, żeby obiekt Detail był "poprawny"

  1. class Page
  2. {. // np. Tutaj adnotacjami @Valid, @NotBlank
  3. private $detail;


W Detail.opis:
- NotBlank

Detail.page:
- NotBlank/NotNull.

  1. class Detail
  2. {
  3. /** @NotBlank **/
  4. private $opis; // itd
  5. }


To Ci powinno pomóc: http://symfony.com/doc/current/book/validation.html
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.