Symfony加入多个表

时间:2015-10-10 14:10:02

标签: php symfony doctrine-orm dql

我尝试使用DQL和

连接我的bundle中的多个表

错误:

 [Syntax Error] line 0, col 610: Error: Expected =, <, <=, <>, >, >=, !=, got 'CarparkFueltext' 

实体:

https://gist.github.com/anonymous/9fc7bfe89bb54427f89c

代码:

https://gist.github.com/anonymous/63680019a3f260733dca

我也尝试过使用createQueryBuilder()方法

代码:

https://gist.github.com/anonymous/92012697fc99fcf02da5

ERROR:

[Syntax Error] line 0, col 423: Error: Expected Literal, got 'JOIN' 

但是,如果我删除任何一个连接语句

JOIN MyBundle:SpareParts\CarparkAgestext CarparkAgestext

OR

JOIN MyBundle:SpareParts\CarFueltext CarFueltext 

我正在获取数据。

错误似乎是我无法加入多个表,我需要加入至少5个表。任何想法我怎么能实现它。

3 个答案:

答案 0 :(得分:1)

加入语法为here

一般例子:

    ...
    ->select(['e1'])
    ->from('AcmeDemoBundle:Entity1', 'e1')
    ->innerJoin('AcmeDemoBundle:Entity2', 'e2', 'WITH', 'e2.e1 = e1')
    ->innerJoin('AcmeDemoBundle:Entity3', 'e3', 'WITH', 'e3.e2 = e2')
    ...

答案 1 :(得分:0)

您可以加入多个表格,但需要使用MyBundle:SpareParts\Carparktype的{​​{3}}右侧。

您应该使用如下查询:

    $query = $this->getEntityManager()->createQueryBuilder()
        ->select($fields)
        ->from('MyBundle:SpareParts\Carparktype Carparktype')
        ->innerJoin('Carparktype.agesText CarparkAgestext')
        ->where('Carparktype.makename =:makename')
        ->andWhere('CarparkAgestext.id =:agesid')
        ->setParameter('makename',$makename)
        ->setParameter('agesid',$param)
        ->getQuery()
        ->getResult();

如您所见,您将从SpareParts\Carparktype的单个属性开始构建JOIN语句,该属性将映射为SpareParts\CarparkAgestext关联(外键)。

答案 2 :(得分:0)

也许你正在尝试加入两个没有定义关系的表。如果是这种情况,您可以使用WITH

加入它们
FROM FooBundle:Entity1 e1 JOIN FooBundle:Entity2 e2 WITH e2.e1_id = e1.id