我开始使用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: { }
答案 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
现在工作正常。