gpt4 book ai didi

mysql - DQL innerJoin 查询等效项

转载 作者:行者123 更新时间:2023-11-29 14:18:39 24 4
gpt4 key购买 nike

我的下面的代码在 phpMyAdmin 上可以正常工作:

select testers.department from testers
inner join request_details
on testers.id = request_details.test_id
where request_details.request_id = '12345'

我尝试将其转换为 DQL,如下所示:

$query =  Doctrine_Query::create()
->select('t.department')
->from('testers t, request_details r')
->innerJoin('t.id r')
->where('t.id = r.tester_id')
->andWhere('r.request_id = ?', 12345);

但是,保存查询结果的变量上的 var_dump() 返回 NULL

最佳答案

您使用的是哪个 Doctrine 版本,因为在 Doctrine2 中您应该使用 QueryBuilder 类,并且应该使用类名和属性,而不是 DQL 中的表名和字段。因此,您应该连接到类字段名称,而不是表字段名称。

innerJoin('t.request_details', 'r') // where request_details is a propery on Tester

此外,您不需要连接它们的位置 (where(t.id = r.tester_id)),这是由 Doctrine 管理的,并且只要实体正确映射即可工作。

您也不需要 from 部分中的 request_details r,Doctrine 也会处理这个问题。

此外,在 from 中使用类名称,而不是表名称。

编辑(忘记了 getResults() 之前的 getQuery()):最后你的查询看起来像这样:

$queryBuilder = EntityManager::create(//em options)->createQueryBuilder();
$queryBuilder->select('t.department')
->from('Tester', 't')
->innerJoin('t.request_details', 'r') // request details is a propery on Tester, that maps to RequestDetails
->where('r.request_id = ?1')
->setParameter(1, 123);

Doctrine 会负责将其转换为 SQL 并加入该事物。最后你还需要获取这些东西:

$departments = $queryBuilder->getQuery()->getResult();

编辑:对于原则 1,类似这样的事情应该有效:

$q = Doctrine_Query::create()
->select('t.department')
->from('Tester t')
->innerJoin('t.request_details r') // request details is a propery on Tester, that maps to RequestDetails
->where('r.request_id = ?', 123);
$depts = $q->fetchArray();

我不太熟悉原则 1,所以请查看以下内容以获取更多信息: http://docs.doctrine-project.org/projects/doctrine1/en/latest/en/manual/dql-doctrine-query-language.html

关于mysql - DQL innerJoin 查询等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12156221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com