Я использую 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?
Вы можете применять критерии один за другим, используя «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);
Других решений пока нет …