我有两张表说项目和项目分配。
如果我们创建Project对象的形式,我们也可以默认获得所有项目分配。
class projectType extends AbstractType {
......
->add('projectAllocation', 'collection',
array(
'type' => new \ProjectBundle\Form\Type\projectAllocationType(),
'allow_add' => true, 'allow_delete' => true,
'prototype' => true,))
...
我们有projectAllocationType
表格。
现在,在这种情况下,将在表单中检索所有项目分配记录。
我们能否拥有项目分配记录等满足某些日期等条件的条件。
如果我们有很多收集记录,基本上就像搜索和编辑一样
任何建议都有助于实现相同的目标。
被修改
$qb=$repository->createQueryBuilder("p")
//->from('Project', 'p')
->leftJoin('p.billingItems', 'b')
->leftJoin('b.invoice', 'inv')
->where('p.projectId = ?1')
->orderBy('p.name', 'ASC')
->setParameter(1, $projectId);
if($invoice){
$qb->andWhere('inv.invoiceId='.$invoice);
// $queryString .= "and inv.invoiceId=".$invoice;
}
$ query-> getSql()查询是正确的。
SELECT p0_.project_id AS project_id0, p0_.name AS name1, b1_.billing_items_id
FROM project p0_
LEFT JOIN billing_items b1_ ON p0_.project_id = b1_.project_id
LEFT JOIN invoice i2_ ON b1_.invoice_id = i2_.invoice_id
WHERE p0_.project_id =171
AND i2_.invoice_id =3
ORDER BY p0_.name ASC
LIMIT 0 , 30
在DB上直接执行查询时,手动添加了billing_items_id
,显示了正确的结果。
但Doctrine
查询project
对象包含所有结算项目。我只需要等于invoice
的项目。
答案 0 :(得分:0)
添加->select('p,b')
解决了我的问题。要考虑两个实体数据,我们必须包括两个实体引用。
$qb=$repository->createQueryBuilder("p")
->select('p,b')
->leftJoin('p.billingItems', 'b')
->leftJoin('b.invoice', 'inv')
->where('p.projectId = ?1')
->orderBy('p.name', 'ASC')
->setParameter(1, $projectId);
if($invoice){
$qb->andWhere('inv.invoiceId='.$invoice);
}