РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
225 of 258 menu

Класс Criteria

Класс Criteria используется для описания того, какие элементы коллекции нужно выбрать, в каком порядке их отсортировать и сколько записей вернуть. Объект Criteria передаётся первым параметром в метод matching класса ArrayCollection, который возвращает новую коллекцию, отфильтрованную по заданным условиям. Условия задаются через методы where, andWhere и orWhere, сортировка - через orderBy, а лимиты - через setFirstResult и setMaxResults.

Синтаксис

<?php use Doctrine\Common\Collections\Criteria; $criteria = Criteria::create(); $criteria->where(Criteria::expr()->eq('field', 'value')); $criteria->orderBy(['field' => Criteria::ASC]); $criteria->setFirstResult(0); $criteria->setMaxResults(10); ?>

Пример

Давайте отфильтруем коллекцию по полю status со значением 'active':

<?php namespace App\Service; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Criteria; class ArticleService { public function filter(): ArrayCollection { $collection = new ArrayCollection([ ['title' => 'article', 'status' => 'active'], ['title' => 'abcde', 'status' => 'draft'], ['title' => 'hello', 'status' => 'active'], ]); $criteria = Criteria::create(); $criteria->where(Criteria::expr()->eq('status', 'active')); $res = $collection->matching($criteria); return $res; } } ?>

Результат выполнения кода:

["article", "hello"]

Пример

Давайте отсортируем коллекцию по полю title по возрастанию и ограничим результат двумя записями:

<?php namespace App\Service; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Criteria; class ArticleService { public function sort(): ArrayCollection { $collection = new ArrayCollection([ ['title' => 'hello', 'status' => 'active'], ['title' => 'abcde', 'status' => 'active'], ['title' => 'article', 'status' => 'active'], ]); $criteria = Criteria::create(); $criteria->orderBy(['title' => Criteria::ASC]); $criteria->setMaxResults(2); $res = $collection->matching($criteria); return $res; } } ?>

Результат выполнения кода:

["abcde", "article"]

Пример

Давайте объединим два условия через andWhere:

<?php namespace App\Service; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Criteria; class ArticleService { public function combine(): ArrayCollection { $collection = new ArrayCollection([ ['title' => 'article', 'status' => 'active', 'count' => 5], ['title' => 'abcde', 'status' => 'active', 'count' => 1], ['title' => 'hello', 'status' => 'draft', 'count' => 9], ]); $criteria = Criteria::create(); $criteria->where(Criteria::expr()->eq('status', 'active')); $criteria->andWhere(Criteria::expr()->gt('count', 2)); $res = $collection->matching($criteria); return $res; } } ?>

Результат выполнения кода:

["article"]

Смотрите также

  • метод create,
    который создаёт новый объект Criteria
  • метод where,
    который задаёт первое условие фильтрации
  • метод orderBy,
    который задаёт сортировку результата
  • метод setMaxResults,
    который ограничивает количество записей
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить