根据Symony 2+中表单集合的条件,只获取少量记录

时间:2014-09-17 11:01:00

标签: forms symfony collections

我有两张表说项目和项目分配。

如果我们创建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的项目。

1 个答案:

答案 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);
    }