Symfony自定义存储库查询给出错误

时间:2015-06-29 10:52:31

标签: symfony doctrine-orm

我是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.idApply.user的{​​{1}}和Offer.application链接指向<{1}}

2 个答案:

答案 0 :(得分:1)

如果你对

感到满意,你仍然可以使用symfony的原始sql
install-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如何处理对象,而不是表。连接建立在实体和属性上,而不是表和字段名称。