Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Problemy z Doctrine
-Atmozfear-
post 13.01.2013, 00:04:44
Post #1





Goście







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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
-Atmozfear-
post 16.01.2013, 20:47:59
Post #2





Goście







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.
Go to the top of the page
+Quote Post
piotr.pasich
post 17.01.2013, 08:58:29
Post #3





Grupa: Zarejestrowani
Postów: 27
Pomógł: 4
Dołączył: 27.01.2012
Skąd: Gliwice

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


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


--------------------
Zapraszam do głosowania na agendę PHPCon Poland 2013 http://www.phpcon.pl/2013/pl/agenda.

---
Piotr Pasich
piotr.pasich@xsolve.pl
www.xsolve.pl
Go to the top of the page
+Quote Post
-Atmozfear-
post 17.01.2013, 13:19:57
Post #4





Goście







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;
Go to the top of the page
+Quote Post
toffiak
post 17.01.2013, 17:00:11
Post #5





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

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


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.


--------------------
Go to the top of the page
+Quote Post
-Atmozfear-
post 17.01.2013, 21:53:39
Post #6





Goście







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ą?
Go to the top of the page
+Quote Post
-Atmozfea-
post 24.01.2013, 23:46:09
Post #7





Goście







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 @ ?
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 23:33