Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problemy z Doctrine
Forum PHP.pl > Forum > Przedszkole
Atmozfear
Witam, otóż mam taki problem że nie wiem jak zapisać w pętli nowe rekordy do bazy danych bez podawania ich idu, używając Symfony 2 z Doctrine 2.

Gdzie bym nie wstawił persist, flush i getManager() w stosunku do pętli tak zawsze zapisany będzie tylko pierwszy rekord, a każde kolejne będą traktowane jako jego aktualizacje, no, chyba że wstawię wszystko na chama w pętli, ale to chyba nie za dobry pomysł .
A więc, co robię źle i jak zrobić to poprawnie? Sprawdzałem dokumentacje i google ale chyba jestem pierwszym takim inteligentem żeby taki problem mieć Lkingsmiley.png
Atmozfear
No dobra, zadowoliłem się flush'em, przepraszam ze post pod postem ale teraz jest inny problem:

Jak wyciągnąć powiązane dane? W dokumentacji podane jest coś takiego:

  1. $product = $this->getDoctrine()
  2. ->getRepository('AcmeStoreBundle:Product')
  3. ->find($id);
  4.  
  5. $categoryName = $product->getCategory()->getName();



Jak rozumiem getCategory ma wywołać zapytanie do bazy danych po te dane, ale nic takiego się nie dzieje.
piotr.pasich
Najpierw trzeba stworzyć relacje między tabelami w konfiguracji. http://symfony.com/doc/current/book/doctri...ps-associations . Dokładniej mówiąc przyjrzyj się relacjom OneToOne, OneToMany, ManyToOne i jak je skonfigurować

Po odpowiednim skonfigurowaniu nie ma już problemu z wyciąganiem powiązanych elementów, bo doctrine sam to obsługuje w sposób, który opisałeś.

Pozdrawiam,
Piotr Pasich
Atmozfear
Dzięki za odpowiedź, jednak już takowe posiadam, generate entities i schema update też przeprowadzone bez błędów, jednak zauważyłem że schema validate sypie błędami dla wszystkich powiązań, więc może coś jednak mam źle zrobione?

  1. class Groups {
  2. /**
  3.   * @ORM\Id
  4.   * @ORM\Column(type="integer")
  5.   * @ORM\GeneratedValue(strategy="AUTO")
  6.   * */
  7. protected $id;
  8.  
  9. /**
  10.   * @ORM\ManyToMany(targetEntity="accounts", inversedBy="id")
  11.   * @ORM\JoinTable(name="accounts_groups")
  12.   * */
  13. private $accounts;


  1. class Accounts {
  2. /**
  3.   * @ORM\Id
  4.   * @ORM\Column(type="integer")
  5.   * @ORM\GeneratedValue(strategy="AUTO")
  6.   * */
  7. private $id;
  8.  
  9. /**
  10.   * @ORM\ManyToMany(targetEntity="Groups", mappedBy="id")
  11.   * */
  12. private $groups;
toffiak
http://docs.doctrine-project.org/en/2.0.x/...on-mapping.html rozdział 5.14, zobacz na co powinno wskazywać "inversedBy" i "mappedBy" a na co u Ciebie wskazuje.

Zauważ także że encje są pisane w formie pojedyńczej.
Atmozfear
Jeśli dobrze pamiętam, to kończyło się to utworzeniem tylko jednej kolumny w tabeli groups_accounts, o co raczej mi nie chodziło.
W każdym bądź razie nie getCategory() wywołuje zapytanie do bazy danych, a dopiero getName(), tak więc z faktem wymienionym powyżej, rozwiązaniem przykładowym jest kretyńsko proste:
  1. $accounts = blabla groups->getaccounts();
  2. $accounts[0]->getId();

Czyli w sumie tak czy inaczej będę się musiał użerać z DQL.

Czy to całe pisanie encji w liczbie mnogiej a pojedynczej robi jakąś różnice, poza estetyczną?
Atmozfea
Znowu mam bardzo, bardzo prosty problem... facepalmxd.gif

  1. $this->tralala = new \stdClass();
  2. @$this->tralala->bla->blaa->bleee['bluuu'] += 1;


Jakaś miła dusza napisać by mogła jak poprawnie to napisać, znaczy się bez użycia @ ?
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.