Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF2][Symfony2][doctrine] po probie zapisania nowego obiektu nie widzi zmiany
Forum PHP.pl > Forum > PHP > Frameworki
robert0770
cześć,

mam następujący problem

moja encja wygląda mniej więcej tak:
(oczywiście są tam komentarze przy mapowaniu oraz setery i getery)
  1. @ORM\Column(name="post_id", type="integer", nullable=false)
  2. protected $postId
  3. @ORM\ManyToOne(targetEntity="Abc\Efg\Entity\Post", fetch="LAZY")
  4. @ORM\JoinColumn(name="post_id", referencedColumnName="id")
  5. protected $post


i musi tak być bo oba pola są przydatne

przy próbie za setowania czego kol wiek do

  1. $Coś->setPostId(999)


wywala mi
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'post_id' cannot be null

to musi być tak zrobione, nie ma możliwości (ze względów wydajnościowych) na wyszukanie obiektu i zrobienie
  1. $Cos->setPost($Post)
Pilsener
Nie wiem o co chodzi, ale na pierwszy rzut oka to masz zduplikowaną nazwę kolumny i nie powinno w ogóle utworzyć bazy:
  1. @ORM\Column(name="post_id", type="integer", nullable=false)
  2. @ORM\JoinColumn(name="post_id", referencedColumnName="id")
ohm
+ jeszcze, albo wiążesz przez setPost($obiekt), albo przez $repository->getReference('Entity', $id) albo zostawiasz samo post_id bez żadnego mapowania jako zwykłą kolumnę integer.
robert0770
to normalka, cały projekt który przejąłem po sporej grupie programistów gdzie jest z 40 encji, ma tak zdefiniowane pola dla ułatwienia, wyciąganie danych działa jak najbardziej
Puszy
Pokaż ciało setPost(); bo obstawiam że to nie jest zwykły setter i finalnie próbujesz ustawić post o id 999 który nie istnieje w bazie.
robert0770
setPost to zwykły setter ustawiający obiekt

  1. /**
  2.   * setPost
  3.   *
  4.   * @param Post $post
  5.   *
  6.   * @return $this
  7.   */
  8. public setPost($post){
  9. $this->post = $post;
  10. return $this;
  11. }


setPostId to zwykły setter ustawiający inta

  1. /**
  2.   * setPostId
  3.   *
  4.   * @param int $postId
  5.   *
  6.   * @return $this
  7.   */
  8. public setPostId($postId){
  9. $this->postId = $postId;
  10. return $this;
  11. }


finalnie chcialem ustawić setPostId(0),
ale zarówno z 0 jak i z np id który jest w bazie czyli np 69 też to samo wywala
Puszy
Nic tu nie pasuje:

1. W jednej encji masz pole $postId które w bazie nazywa się post_id oraz pole $post które w bazie też nazywa się post_id, validate-schema powinno Ci sypnąć chyba jakimś błędem.
2. Nie rozumiem po co trzymać relację do encji Abc\Efg\Entity\Post i jednocześnie pole integer z id postu. Właśnie dla uniknięcia takich sytuacji korzysta się z ORM.
3. Jeżeli ustawisz tylko $postId poprzez setPostId() to nie będziesz miał relacji między tabelami.
4. W $postId możesz wrzucić dowolną wartość, zarówno istniejących jak i nieistniejących postów, pomijam fakt dubli.

Wniosek: wywal pole $postId, i korzystaj z referencji tak jak Ci pisał ohm

  1. $entitymanager->getReference(Foo::class, 999);
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.