如何使用doctrine查询生成器编写此sql查询?

时间:2017-12-20 15:40:17

标签: symfony join doctrine-orm

如何在symfony查询构建器语法上编写此sql查询?

分析,地区,自然和花园是实体

public function countAnalysisByCriteria($stateProduct, $status, Nature $nature, Region $region, Garden $garden, $supplierName, $bio, $country, $startDate, $endDate){
        $qb = $this->createQueryBuilder('analysis')
            ->addSelect('count(analysis) as result')
            ->innerJoin('analysis.sample', 'sample', 'WITH', 'analysis.sample = sample')
            ->innerJoin('sample.nature', 'nature', 'WITH', 'sample.nature = :nature')
            ->innerJoin('sample.region', 'region', 'WITH', 'sample.region = :region')
            ->innerJoin('sample.garden', 'garden', 'WITH', 'sample.garden = :garden')

            ->groupBy('result');

               ->andWhere('sample.stateProduct = :stateProduct');
               ->setParameter('stateProduct', $stateProduct);
               ->andWhere('sample.nature = :nature');
               ->setParameter('nature', $nature);
               ->andWhere('sample.region = :region');
               ->setParameter('region', $region);
               ->andWhere('sample.garden = :garden');
               ->setParameter('garden', $garden);
               ->andWhere('sample.dateReception BETWEEN :startDate AND :endDate');
                $qb->setParameter('startDate', $startDate);
                $qb->setParameter('endDate', $endDate);
            }

        return $qb->getQuery()->getArrayResult();

我试过这种方式但是,我没有错误消息,但它与sql查询的结果不一样。

Dim doc As Document
Dim head As String, foot As String

Do Until strFile = ""
    Set doc = Documents.Open(strFolder & strFile)
    head = doc.Sections(1).Headers(wdHeaderFooterPrimary).Range.text
    foot = doc.Sections(1).Footers(wdHeaderFooterPrimary).Range.text
    doc.Close False

    Count = Count + 1
    Set rng = MainDoc.Range
    With rng
        .Collapse wdCollapseEnd
        If Count > 1 Then
            .InsertBreak wdSectionBreakNextPage
            .End = MainDoc.Range.End
            .Collapse wdCollapseEnd
        End If
        .InsertAfter head
        .InsertParagraphAfter
        .InsertFile strFolder & strFile
        .InsertAfter foot
    End With
    strFile = Dir$()
Loop

1 个答案:

答案 0 :(得分:0)

您的代码段完全错误,请尝试以下操作:

firstOrCreate
  • 不要在作业use Doctrine\ORM\Query\Expr\Join; public function countAnalysisByCriteria( $stateProduct, $status, Nature $nature, Region $region, Garden $garden, $supplierName, $bio, $country, $startDate, $endDate ) { $qb = $this->createQueryBuilder(); return $qb->select('count(analysis) as result') ->innerJoin('analysis.sample', 'sample', Join::WITH, 'analysis.sample = sample.id') ->innerJoin('sample.nature', 'nature', Join::WITH, 'sample.nature = nature.id') ->innerJoin('sample.region', 'region', Join::WITH, 'sample.region = region.id') ->innerJoin('sample.garden', 'garden', Join::WITH, 'sample.garden = garden.id') ->groupBy('result') ->andWhere('sample.stateProduct =:stateProduct') ->setParameter('stateProduct', $stateProduct) ->andWhere('sample.nature =:nature') ->setParameter('nature', $nature) ->andWhere('sample.region =:region') ->setParameter('region', $region) ->andWhere('sample.garden =:garden') ->setParameter('garden', $garden) ->andWhere('sample.dateReception BETWEEN :startDate AND :endDate') ->setParameter('startDate', $startDate) ->setParameter('endDate', $endDate) ->getQuery() ->getArrayResult(); } 上添加空格(错误),= :(右)
  • 正确检查您的代码,注意我在某些部分删除了一些冒号=:,因为没有意义。