Doctrine 查询语言,两个连接查询
Doctrine Query Language, Two joins query
我的 dql 有问题。我无法正确编写查询。需要将查询重写为 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 吗?
你在订单和电影之间有一个多对多的关联,你可以设置你的实体来实现这种关系,如下所示
订单实体
/**
* @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;
现在在查询生成器中,您可以像下面这样将您的订单实体与电影合并
$this->createQueryBuilder('o')
->select('o,m')
->innerJoin('o.movies','m')
->orderBy('m.title','DESC')
->getQuery()
->getResult();
以上查询订单及其相关电影
如需进一步说明,请参阅文档 22.2.19. @ManyToMany
我的 dql 有问题。我无法正确编写查询。需要将查询重写为 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 吗?
你在订单和电影之间有一个多对多的关联,你可以设置你的实体来实现这种关系,如下所示
订单实体
/**
* @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;
现在在查询生成器中,您可以像下面这样将您的订单实体与电影合并
$this->createQueryBuilder('o')
->select('o,m')
->innerJoin('o.movies','m')
->orderBy('m.title','DESC')
->getQuery()
->getResult();
以上查询订单及其相关电影
如需进一步说明,请参阅文档 22.2.19. @ManyToMany