Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony]2 Aktualizacja rekordu w bazie danych
Grzesiek23
post
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 25.12.2009

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
danio1021
post
Post #2





Grupa: Zarejestrowani
Postów: 4
Pomógł: 1
Dołączył: 24.04.2009

Ostrzeżenie: (0%)
-----


  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) (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif) )

Ten post edytował danio1021 29.10.2012, 21:05:00
Go to the top of the page
+Quote Post
toffiak
post
Post #3





Grupa: Zarejestrowani
Postów: 395
Pomógł: 80
Dołączył: 24.08.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Grzesiek23
post
Post #4





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 25.12.2009

Ostrzeżenie: (0%)
-----


Dzięki wielkie - muszę uważnej czytać błędy (IMG:style_emoticons/default/smile.gif)

findByOne jest tym, czego szukałem (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
danio1021
post
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 1
Dołączył: 24.04.2009

Ostrzeżenie: (0%)
-----


No i warto zacytować błąd przy pisaniu tematu (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 23:45