Доктрина устанавливает несколько критериев по одному вместо всех сразу

Я использую KendoUI Framework GRID, который возвращает обратно JSON пользовательских настроек фильтра.

Его результат выглядит примерно так для фильтров.

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

Мне нужно будет перебрать этот массив и создать критерии для доктрины для фильтрации. Тем не менее, каждый образец, который я видел, показывает, что все происходит одновременно, что не будет работать в моем сценарии.

Я также использую 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 Grid, чтобы он знал, что отображать. Я зацикливаюсь на company_records, чтобы создать структуру, которая мне нужна.

Мне нужно применить эти фильтры к $ company_records динамично а также не статично как-то. Это возможно?

Ресурсы:

Ниже делаем это статически во всех примерах

Как мне использовать сложные критерии в хранилище сущности доктрины 2?

1

Решение

Вы можете применять критерии один за другим, используя «Match ()»:

$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);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]