Wpis z mikrobloga

#symfony #symfony2 #php #doctrine #mysql
Mam dwie encję: Post i Category. Post zawiera pole $category, a Category pole $posts - czyli typowa relacja one to many.
Chciałbym teraz pobrać post z powiązanym obiektem kategorii w jednym zapytaniu. W tym celu używam takiej funkcji umiejscowionej w PostRepository. Niestety ten DQL w połączeniu z kluczami obcymi generuje nieskończenie zagnieżdżone zapytanie ( ͡° ʖ̯ ͡°)
Jak powinienem to zrobić w prawidłowy sposób, Murki?
  • 26
  • Odpowiedz
Mam dwie encję


@DiKey: Nie chce mi się rozkminiać co tam dokładnie w DQLu źle zrobiłeś, ale – tak jak podpowiedział @kmicolo – możesz użyć QB:

return $this->createQueryBuilder('post')
->select('post', 'category')
->join('post.category', 'category')
->where('post.id = :id')
->setParameter('id', $id)
->getQuery()
->getSingleResult();

Doctrine sam to załatwi w sposób w miarę optymalny.


@kmicolo: Nie załatwi. To jest problem n+1. Wszystko spoko jak masz kilka encji. Wszystko spoko jak dopiero masz kilka zapytań na
  • Odpowiedz
@MacDada: tak wyglądają encje:
class Post {
/**
* @ORM\ManyToOne(targetEntity="Category", inversedBy="posts")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
protected $category;
}

class Category {
/**
* @ORM\OneToMany(targetEntity="Post", mappedBy="category")
*/
protected $posts;
}
  • Odpowiedz