左联接学说查询生成器

时间:2018-07-26 21:12:53

标签: php oop doctrine-orm

我试图理解没有关联的联接。我看到人们在哪里取得成功的一切都是有意义的。当我将其应用于查询时,它会出错。

$query_builder = $this->getEntityManager()->createQueryBuilder();
$query_builder->select('er', 'es')
        ->from('EmployeeRegister', 'er')
        ->leftJoin(
            'EmployeeStatus',
            'es',
            \Doctrine\ORM\Query\Expr\Join::ON,
            'er.eid = es.eid'
        )
        ->where('er.eid = :eid')
        ->setParameter('eid', '0999999');
    $result = $query_builder->getQuery()->getResult();

这会导致错误:

PHP Fatal error:  Uncaught Doctrine\ORM\Query\QueryException: SELECT er, es FROM EmployeeRegister er LEFT JOIN EmployeeStatus es ON er.eid = es.eid WHERE er.eid = :eid in /Documents/PHPStormProjects/ax/_vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php:43
Stack trace:
#0 /Documents/PHPStormProjects/ax/_vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(491): Doctrine\ORM\Query\QueryException::dqlError('SELECT er, es F...')
#1 /Documents/PHPStormProjects/ax/_vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(991): Doctrine\ORM\Query\Parser->semanticalError('line 0, col 19 ...', Array)
#2 /Documents/PHPStormProjects/ax/_vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(1734): Doctrine\ORM\Query\Parser->validateAbstractSchemaName('EmployeeRegiste...')
#3 /Documents/PHPStormProjects/ax/_vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(1584): Doctrine\ORM\Query\Parser->RangeVariableDeclaration()
#4 /Us in /Documents/PHPStormProjects/ax/_vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php on line 65

任何建议都会很有帮助。仍在学习该学说。

1 个答案:

答案 0 :(得分:0)

如果有人可以解释这在教义2中的含义或原因。当我将联接更改为使用WITH而不是ON时,它将起作用。

$query_builder->select('er', 'es')
    ->from('EmployeeRegister', 'er')
    ->leftJoin(
        'EmployeeStatus',
        'es',
        \Doctrine\ORM\Query\Expr\Join::WITH,
        'er.eid = es.eid'
    )
    ->where('er.eid = :eid')
    ->setParameter('eid', '0999999');

在什么情况下ON起作用?我尝试了一些随机操作,似乎只有ON才能起作用。