Метод findAll класса ServiceEntityRepository
Метод findAll класса ServiceEntityRepository возвращает массив всех сущностей,
хранящихся в таблице, закреплённой за данным репозиторием.
Метод не принимает обязательных параметров и возвращает плоский массив объектов.
Если в таблице нет записей, метод вернёт пустой массив.
Синтаксис
public function findAll(): array
Пример
Давайте создадим репозиторий для сущности Article и получим все статьи через метод findAll:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
/**
* @extends ServiceEntityRepository<Article>
*/
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
}
?>
Теперь вызовем метод findAll в контроллере и выведем заголовки статей:
<?php
namespace App\Controller;
use App\Repository\ArticleRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/articles', name: 'article_index')]
public function index(ArticleRepository $articleRepository): Response
{
$articles = $articleRepository->findAll();
foreach ($articles as $article) {
echo $article->getTitle() . '<br>';
}
return new Response();
}
}
?>
Результат выполнения кода:
article 1<br>
article 2<br>
article 3<br>
Пример
Давайте посчитаем количество всех статей, используя findAll и функцию count:
<?php
namespace App\Controller;
use App\Repository\ArticleRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/articles/count', name: 'article_count')]
public function count(ArticleRepository $articleRepository): Response
{
$articles = $articleRepository->findAll();
$total = count($articles);
return new Response('Total articles: ' . $total);
}
}
?>
Результат выполнения кода для трёх статей:
Total articles: 3
Пример
Давайте отфильтруем статьи, полученные через findAll, по булевому полю published:
<?php
namespace App\Controller;
use App\Entity\Article;
use App\Repository\ArticleRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/articles/published', name: 'article_published')]
public function published(ArticleRepository $articleRepository): Response
{
$articles = $articleRepository->findAll();
$published = array_filter($articles, function (Article $article) {
return $article->isPublished() === true;
});
return new Response('Published: ' . count($published));
}
}
?>
Результат выполнения кода:
Published: 2
Смотрите также
-
класс
ServiceEntityRepository,
который является базовым классом для репозиториев -
метод
find,
который находит сущность по её идентификатору -
метод
findBy,
который находит сущности по заданным критериям -
метод
count,
который возвращает количество сущностей