Метод create класса Criteria
Метод create класса Criteria создаёт
новый объект критериев выборки. Критерии
используются для фильтрации, сортировки и
ограничения количества элементов коллекции
ArrayCollection. Метод является статическим
и возвращает готовый объект Criteria, к
которому затем можно применять условия через
where, andWhere, orWhere,
orderBy, setFirstResult и
setMaxResults.
Синтаксис
Criteria::create()
Пример
Давайте создадим критерий и отфильтруем
коллекцию по значению поля status:
<?php
namespace AppService;
use DoctrineCommonCollectionsArrayCollection;
use DoctrineCommonCollectionsCriteria;
class ArticleService
{
public function filter(): array
{
$collection = new ArrayCollection([
['title' => 'article 1', 'status' => 'active'],
['title' => 'article 2', 'status' => 'draft'],
['title' => 'article 3', 'status' => 'active'],
]);
$criteria = Criteria::create()
->where(Criteria::expr()->eq('status', 'active'));
return $collection->matching($criteria)->toArray();
}
}
?>
Результат выполнения кода:
[
["title" => "article 1", "status" => "active"],
["title" => "article 3", "status" => "active"],
]
Пример
Давайте добавим сортировку и ограничим количество результатов:
<?php
namespace AppService;
use DoctrineCommonCollectionsArrayCollection;
use DoctrineCommonCollectionsCriteria;
class ArticleService
{
public function sort(): array
{
$collection = new ArrayCollection([
['title' => 'article 1', 'views' => 10],
['title' => 'article 2', 'views' => 30],
['title' => 'article 3', 'views' => 20],
]);
$criteria = Criteria::create()
->orderBy(['views' => 'DESC'])
->setMaxResults(2);
return $collection->matching($criteria)->toArray();
}
}
?>
Результат выполнения кода:
[
["title" => "article 2", "views" => 30],
["title" => "article 3", "views" => 20],
]
Пример
Давайте объединим несколько условий через
andWhere и orWhere:
<?php
namespace AppService;
use DoctrineCommonCollectionsArrayCollection;
use DoctrineCommonCollectionsCriteria;
class ArticleService
{
public function combine(): array
{
$collection = new ArrayCollection([
['title' => 'article 1', 'status' => 'active', 'views' => 10],
['title' => 'article 2', 'status' => 'draft', 'views' => 50],
['title' => 'article 3', 'status' => 'active', 'views' => 30],
]);
$criteria = Criteria::create()
->where(Criteria::expr()->eq('status', 'active'))
->andWhere(Criteria::expr()->gt('views', 20));
return $collection->matching($criteria)->toArray();
}
}
?>
Результат выполнения кода:
[
["title" => "article 3", "status" => "active", "views" => 30],
]