doctrine-orm - Doctrine 2/Zend Framework 2 中 DQL 中的 INNER JOIN

标签 doctrine-orm zend-framework2 dql doctrine-query

我对原则 2 中的 DQL 有疑问。

子查询在DQL中似乎不可用,所以我不知道如何转换:

SELECT DISTINCT a.ID_DOMAINE, L_DOMAINE, b.ID_SS_DOMAINE, L_SS_DOMAINE, c.ID_COMPETENCE,     L_COMPETENCE
    FROM ((qfq_prod.REF_DOMAINE a inner join qfq_prod.REF_SS_DOMAINE b on a.id_domaine = b.id_domaine)
inner join qfq_prod.REF_COMPETENCE c on b.id_ss_domaine = c.id_ss_domaine)
inner join qfq_prod.REF_PERS_COMP d on c.id_competence = d.id_competence

转换为 DQL 表达式。

我尝试了一下,得到了

"Error: Class '(' is not defined."

我发现我们也可以使用查询生成器来执行此操作。

作为原则 2 的新手,有人可以向我解释一下我该如何做到这一点吗?

我的 DQL 目前是:

$query = $this->getEntityManager()->createQuery ( "SELECT DISTINCT a.ID_DOMAINE, L_DOMAINE, b.ID_SS_DOMAINE, L_SS_DOMAINE, c.ID_COMPETENCE, L_COMPETENCE
FROM ((BdDoctrine\Entity\Domaine a inner join BdDoctrine\Entity\SsDomaine b on a.id_domaine = b.id_domaine)
inner join BdDoctrine\Entity\Competence c on b.id_ss_domaine = c.id_ss_domaine)
inner join BdDoctrine\Entity\LienPersComp d on c.id_competence = d.id_competence" );

$res = $query->getResult ();

最佳答案

Subqueries seem to be unavailable in DQL, so I don't know how to transform :

事实上,确实如此。你的代码(无意冒犯)很难读,所以我给你举个例子:

//controller
$repo = $this->getDoctrine()->getRepository("Your:Bundle:Category") ;
$results = $repo->findAllForSomePage() ;

// CategoryRepository.php
public function findAllForSomePage()
{
    return $this->createQueryBuilder("o")
        ->innerJoin("o.products", "p", "WITH", "p.price>:price")->addSelect("p")
            ->setParameter("price", 50)
        ->where("o.id IN (SELECT s1.id FROM Your:Bundle:Something s1 WHERE s1.col1=5)")
        ->getQuery()->getResult() ;
}

这里假设您有 Category hasMany Products 关系并且您定义了 CategoryRepository 文件。您永远不应该在 Controller 中创建查询。

此示例仅当类别的产品价格大于 50 时才会获取类别,并且类别 ID 是通过虚构的子查询获取的类别 ID。这 100% 有效。

您应该对您的要求应用相同的逻辑。

此外,在使用连接时,您不应该使用ON语句,这是由学说处理的。

关于doctrine-orm - Doctrine 2/Zend Framework 2 中 DQL 中的 INNER JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17474066/

相关文章:

php - 使用 Doctrine 查询 ManyToMany 关系并在 Symfony 中显示良好的结果

php - Doctrine 2 - 加入的实体仍然是代理并在请求后生成两个查询

doctrine-orm - 为什么 DoctrineModule Cli 会介入 ZF2 应用程序的命令行请求?

php - 预期的字符串结尾,在 DQL Symfony 中使用 LIMIT 时得到 'LIMIT'

php - 添加数据到分页器(KnpPaginatorBundle,Symfony)

mysql - Doctrine2 中从 n+1 到 n-1 的订购日期

php - rackspace 子容器不上传文件

php - 敏捷性 : ApiProblem alternative?

doctrine-orm - Doctrine DQL 返回多种类型的实体

doctrine-orm - Doctrine - 如何检查集合是否包含实体