php - Doctrine 查询语言,两个连接查询

标签 php mysql symfony doctrine-orm

我的 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

关于php - Doctrine 查询语言,两个连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28616655/

相关文章:

symfony - 教义 : ORM QueryBuilder or DBAL QueryBuilder

php - 找出由 PHP 的 mcrypt 创建的确切 key

php - 从 facebook api Restserver 获取 JSON 响应

php - 尝试将 $_POST 插入 MySQL 时没有任何值(value)

mysql - 使用 JOIN 和 GROUP BY 时出现重复条目

php - Propel:即使第二个表没有相应的条目,也可以从 2 个数据库表中获取查询结果

symfony - 清除缓存会删除 web/bundles/app 文件夹

php - YouTube 列表搜索过滤器

php - Heroku H18 503 "Request Interrupted"错误

mysql - 使用 Ansible mysql_db 模块生成的 sql 转储文件中的数据库特异性