我在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
。
答案 0 :(得分:1)
您使用的是哪个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();
我对Doctrine 1并不熟悉,所以请查看以下内容以获取更多信息: http://docs.doctrine-project.org/projects/doctrine1/en/latest/en/manual/dql-doctrine-query-language.html