学说一次设置多个标准而不是一次性

时间:2016-01-27 11:33:15

标签: php doctrine-orm kendo-grid symfony doctrine-query

我正在使用KendoUI Framework GRID返回用户当前过滤器设置的JSON。

对于过滤器,其结果看起来像这样。

"filter":{"logic":"and","filters":[{"field":"name","operator":"contains","value":"o"},{"field":"name","operator":"startswith","value":"w"}]}

我需要迭代这个数组并为doctrine创建过滤依据。我见过的每一个样本都表明这一切都在一起发生,这对我的情景不起作用。

我也使用Symfony 3.0,因此下面的代码会创建存储库。

$repository = $this->getDoctrine()->getRepository('AppBundle:Company');

然后我为目前的其余代码执行此操作。

$company_total = $repository->findAll();
        $company_records = $repository->findBy(array(),$sort,$pageSize,($page-1)*$pageSize);

        $data["total"] = count($company_total);

        foreach($company_records as $company){
            $temp["id"]     = $company->getId();
            $temp["name"]   = $company->getName();
            $temp["phone"]  = $company->getPhone();
            $temp["email"]  = $company->getEmail();
            $data["data"][] = $temp;
        }

        //converts data to JSON
        return new JsonResponse($data);

所有这些代码正在做的是返回一个JSON响应到Kendo UI网格控件,以便它知道要显示什么。我循环在company_records上创建我需要的结构。

我需要以某种方式将这些过滤器应用于$ company_records 动态非静态。这可能吗?

资源:

以下是在所有示例中静态执行

How do I use a complex criteria inside a doctrine 2 entity's repository?

1 个答案:

答案 0 :(得分:0)

您可以使用“ matching()”一一应用条件:

$expr1 = Doctrine\Common\Collections\Criteria::expr();
$c1 = Doctrine\Common\Collections\Criteria::create();

$c1->where($expr->eq('fieldName', 'someValue'));

$company_total = $repository->matching($c1);

$expr2 = Doctrine\Common\Collections\Criteria::expr();
$c2 = Doctrine\Common\Collections\Criteria::create();

$c2->where($expr2->eq('fieldName2', 'someValue2'));

$company_total2 = $company_total->matching($c2);