Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [inny][SF2][Symfony2]Przerobienie nativSQL na to z użyciem createQueryBuilder
Geniesis
post
Post #1





Grupa: Zarejestrowani
Postów: 53
Pomógł: 5
Dołączył: 4.12.2013
Skąd: Śląsk

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


Witam, mam wydawało by się dosyć prosty problem: chcę pobrać dane z bazy używając dwóch left join'ów, w nativSQLzapytanie wygląda tak:
  1. SELECT p . * , u.username, us . *
  2. FROM `post` p
  3. LEFT JOIN fos_user u ON ( p.post_author_id = u.id )
  4. LEFT JOIN user_setting us ON ( us.user_id = u.id )
  5. WHERE topic_id =1

Sprawdzałem w PhpMyAdmin - dziala dobrze
teraz chcę owe zapytanie napisać za pomocą createQueryBuilder, doszedłem do piewszego left join, całość pobiera poprawnie
  1. $qb->select('p, u.username')
  2. ->from($this->entityPath, 'p')
  3. ->leftJoin('p.postAuthor', 'u', 'WITH', 'p.postAuthor=u.id' )
  4. ->addOrderBy('p.addedDate', 'ASC')
  5. ->where('p.topicId=:id')
  6. ->setParameter('id', $id)
  7. ;

  1. <pre>
  2. array(2) {
  3. [0]=>
  4. array(2) {
  5. [0]=>
  6. string(22) "UserBundle\Entity\Post"
  7. ["username"]=>
  8. string(4) "test"
  9. }
  10. [1]=>
  11. array(2) {
  12. [0]=>
  13. string(22) "UserBundle\Entity\Post"
  14. ["username"]=>
  15. string(4) "test"
  16. }
  17. }
  18. </pre>

jednakże nie wiem jak najlepiej dodać drugiego gdy relacja nie występuje pomiędzy post- user_setting a user-user_setting, po kilku kombinacjach doszedłem do czegoś takiego:
  1. $qb->select('p, u.username, us')
  2. ->from($this->entityPath, 'p')
  3. ->leftJoin('p.postAuthor', 'u', 'WITH', 'p.postAuthor=u.id' )
  4. ->leftJoin('UserBundle\Entity\UserSetting', 'us', 'WITH', 'us.user=u.id' )
  5. ->addOrderBy('p.addedDate', 'ASC')
  6. ->where('p.topicId=:id')
  7. ->setParameter('id', $id)
  8. ;

tylko, że wynikowa tablica zupełnie mnie nie satysfakcjonuje
  1. array(3) {
  2. <pre>
  3. [0]=>
  4. array(1) {
  5. [0]=>
  6. string(22) "UserBundle\Entity\Post"
  7. }
  8. [1]=>
  9. array(2) {
  10. [0]=>
  11. string(29) "UserBundle\Entity\UserSetting"
  12. ["username"]=>
  13. string(4) "test"
  14. }
  15. [2]=>
  16. array(1) {
  17. [0]=>
  18. string(22) "UserBundle\Entity\Post"
  19. }
  20. }
  21. </pre>

Nie chcę pisać specjalnie funkcji w PHP by to jakoś złączyć tak jak powinno wyglądać (chyba, że nie ma innego wyboru).

Czy znajdzie się dobra dusza, która doradzi mi jak to zrobić?
I relacje post.orm:
  1. manyToOne:
  2. topic:
  3. targetEntity: Topic
  4. joinColumn:
  5. name: topic_id
  6. referencedColumnName: id
  7. postAuthor:
  8. targetEntity: User
  9. joinColumn:
  10. name: post_author_id
  11. referencedColumnName: id

user_setting.orm
  1. oneToOne:
  2. user:
  3. targetEntity: User
  4. joinColumn:
  5. name: user_id
  6. referencedColumnName: id
Go to the top of the page
+Quote Post
lukaskolista
post
Post #2





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


Nie ogarniam. Po co korzystasz z Doctrine, skoro do takich prostych rzeczy rzeźbisz zapytania? Przestaw myślenie z relacyjnych baz danych na obiekty i wszystko bedzie proste.
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 Aktualny czas: 22.08.2025 - 03:47