Symfony2向SELECT添加字段会中断LEFT JOIN

时间:2014-01-28 22:13:21

标签: sql symfony doctrine-orm dql

我开始使用symfony进行开发。不幸的是,我浪费时间使用Symfony2 Doctrine编写简单的SQL查询,我不太清楚。

这是我的问题:我不想做一个简单的LEFT JOIN并获得所需的数据。

我的查询:

$query = $this->getDoctrine()->getManager()
                ->createQuery(
                    'SELECT p, s FROM DemoProductBundle:Product p LEFT JOIN DemoProductBundle:SynchronizationSetting s WITH p.id = s.id_product ORDER BY p.id ASC'
                );

当只有SELECT时一切正常但如果我添加SELECT p,则s query返回NULL。也许SynchroniZationSetting实体有问题吗?我自己在这里设置了IDENTYTY列。

Demo\ProductBundle\Entity\SynchronizationSetting:
    type: entity
    table: synchronization_setting
    id:
          id_product:
              type: integer
              nullable: false
              unsigned: true
              comment: ''
              id: true
              generator:
                  strategy: IDENTITY
    fields:
        sonia:
            type: string
            nullable: true
            length: 1
            fixed: true
            comment: ''
            default: '0'
        strefa:
            type: string
            nullable: true
            length: 1
            fixed: true
            comment: ''
            default: '0'
        open:
            type: string
            nullable: true
            length: 1
            fixed: true
            comment: ''
            default: '0'
        internet:
            type: string
            nullable: true
            length: 1
            fixed: true
            comment: ''
            default: '0'
    oneToOne:
        idProduct:
            targetEntity: Product
            cascade: {  }
            mappedBy: null
            inversedBy: null
            joinColumns:
                id_product:
                    referencedColumnName: id
            orphanRemoval: false
    lifecycleCallbacks: {  }

1 个答案:

答案 0 :(得分:0)

问题是由使用不正确的列名引起的。 Symfony实体生成器更改名称,例如从id_product更改为idProduct。

所以:

 SELECT p, s FROM DemoProductBundle:Product p 
 LEFT JOIN DemoProductBundle:SynchronizationSetting s WITH p.id = s.id_product ORDER BY p.id ASC
应该是:

 SELECT p, s FROM DemoProductBundle:Product p 
LEFT JOIN DemoProductBundle:SynchronizationSetting s WITH p.id = **s.idProduct** ORDER BY p.id ASC

现在工作正常。