Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]2 Aktualizacja rekordu w bazie danych
Forum PHP.pl > Forum > PHP > Frameworki
Grzesiek23
W sumie jest to szybkie pytanie.

Szukam rekordu o danym polu w bazie:
  1. $offer = $em->getRepository('gpMyAppBundle:Auction')->findBy(array('MyApp_id' => $secondId));


Jeśli nie ma, to tworzę nowy obiekt i dodaję do bazy. Jest OK.

Natomiast jeśli istnieje, to próbowałem się odwołać do obiektu $offer, np:
  1. $offer->setTitle($title);

co skutkowało błędem.

Pomogło wykonanie kolejnego zapytania:
  1. $offer = $em->getRepository('gpMyAppBundle:Auction')->find($id);


Czy w Doctrine2 nie ma możliwości wykonania aktualizacji na obiekcie pobranym przez metodę findBy (albo inną niż "find()")?
Czy może ja coś źle robiłem?
danio1021
  1. $offer = $em->getRepository('gpMyAppBundle:Auction')->findOneBy(array('MyApp_id' => $secondId));


Musisz użyć findOneBy, ponieważ w przeciwnym przypadku dostajesz jakąś tablicę (ArrayCollection lub coś w tym stylu) smile.gif

Generalnie polecam używać środowiska deweloperskiego (zamiast app.php masz app_dev.php). Tam wyświetliłby Ci się przecież błąd, że jest to obiekt innej klasy (ew. non-object, bo nie pamiętam co Doctrine zwraca w findBy smile.gif)
toffiak
Metoda findby(), zwraca tablicę wyników, nawet gdy będzie to jeden rekord, zwrócona będzie tablica z tym jednym rekordem, więc poprawnie powinna sie sprawdzać
  1. $offer = $em->getRepository('gpMyAppBundle:Auction')->findBy(array('MyApp_id' => $secondId));
  2. if(!$offer[0]){
  3. throw new NotFoundHttpException('not found');
  4. }


Częściej wykorzytuje się jednak metodę findOneBy(), wraz z blokami try catch, metoda ta zwróci jeden pasujący rekord lub wyrzuci wyjątek gdy będzie więcej niż jeden lub nie będzie ich wcale.
Grzesiek23
Dzięki wielkie - muszę uważnej czytać błędy smile.gif

findByOne jest tym, czego szukałem wink.gif
danio1021
No i warto zacytować błąd przy pisaniu tematu smile.gif
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.