我是Symfony的新手,我正在尝试习惯查询构建器。目前我正在尝试加入三个表,以下MySQL查询为我提供了在PhpMyAdmin中运行时所需的结果
SELECT * FROM pe_users u
LEFT JOIN pe_apply a ON u.id = a.user
LEFT JOIN pe_offer o ON a.id = o.application
但是当我在Symfony Repository方法中移动它时
namespace Ache\AdminBundle\Repository;
use Doctrine\ORM\EntityRepository;
class AdminRepository extends EntityRepository{
public function findAllAppByStatus(){
$query = $this->getEntityManager()->createQuery(
'SELECT * FROM pe_users u
LEFT JOIN pe_apply a ON u.id = a.user
LEFT JOIN pe_offer o ON a.id = o.application
');
try {
return $query->getSingleResult();
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
}
我收到错误
[语法错误]第0行,第7行:错误:预期的IdentificationVariable | ScalarExpression | AggregateExpression |功能声明| PartialObjectExpression | “(”Subselect“)”| CaseExpression,获得'*'
这个错误是什么意思?我做错了什么?
更新
我拥有的三个实体如下:
UserBundle:User
CoreBundle:Apply
AdminBundle:Offer
User.id
与Apply.user
的{{1}}和Offer.application
链接指向<{1}}
答案 0 :(得分:1)
如果你对
感到满意,你仍然可以使用symfony的原始sqlinstall-package stylecop.msbuild
答案 1 :(得分:0)
我愿意:
public function findAllAppByStatus(){
$qb = $this->createQueryBuilder('u')
->leftJoin('CoreBundle:Apply', 'a', 'WITH', 'a.user = u')
->leftJoin('AdminBundle:Offer', 'o', 'WITH', 'o.application = a')
->setMaxResults(1); // if you return only 1 result, you want to be sure only one (or none) result is fetched
return $qb->getQuery()->getOneOrNullResult();
如果你想要返回可能很多的结果,那么&#39; All&#39;在方法名称建议中,摆脱->setMaxResults()
并使用$qb->getQuery()->getResult();
查看queryBuilder如何处理对象,而不是表。连接建立在实体和属性上,而不是表和字段名称。