主义查询语言,两次联接查询 [英] Doctrine Query Language, Two joins query
问题描述
我对dql有问题.我无法正确编写查询.需要将查询重写为dql
I have a problem with dql. I can't write properly query. Need to rewrite the query to dql
'SELECT
Movie.title, Movie.price, Order.order_data, Order.order_status
FROM
(Order LEFT JOIN Order_has_Movie ON Order.order_id = Order_has_Movie.order_id)
INNER JOIN Movie ON Order_has_Movie.movie_id = Movie.movie_id
ORDER BY
title DESC'
一开始,我写了这样的东西:
At the beginning, I wrote something like this:
'SELECT
m.title, m.price, o.order_data, o.order_status
FROM
我不知道该如何处理.有人可以告诉我,如何写这样的JOINS吗?
And I don't know how to deal with this. Could someone tell me, how to wrtie JOINS like this ?
推荐答案
订单和电影之间存在多对多关联,您可以设置实体来实现这种关系,如下所示
You have a many-to-many association between order and movie you can set your entities to achieve this relation something like below
订单实体
/**
* @ORM\ManyToMany(targetEntity="Namespace\YourBundle\Entity\Movie", cascade={"persist"})
* @ORM\JoinTable(name="Order_has_Movie",
* joinColumns={@ORM\JoinColumn(name="order_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="movie_id", referencedColumnName="id")}
* )
*/
private $movies;
电影实体
/**
*
* @ORM\ManyToMany(targetEntity="Namespace\YourBundle\Entity\Order", mappedBy="movies")
*/
private $order;
现在,在查询生成器中,您可以将订单实体与以下电影一起加入
Now in query builder you can join your order entity with movie like below
$this->createQueryBuilder('o')
->select('o,m')
->innerJoin('o.movies','m')
->orderBy('m.title','DESC')
->getQuery()
->getResult();
以上查询将订购及其相关的电影
Above query will orders and its related movies
有关进一步的说明,请参见docs 22.2.19@ManyToMany
For further clarification see docs 22.2.19. @ManyToMany
这篇关于主义查询语言,两次联接查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!