Метод findOneBy
Метод findOneBy класса ServiceEntityRepository
возвращает первую запись, соответствующую
переданным условиям. Первым параметром
передаётся массив условий вида ['field' => value].
Вторым необязательным параметром можно
задать сортировку результата. Если запись
не найдена, метод вернёт null.
Синтаксис
public function findOneBy(array $criteria, ?array $orderBy = null): ?object
Пример
Давайте найдём статью по её id:
<?php
namespace AppRepository;
use AppEntityArticle;
use DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository;
use DoctrinePersistenceManagerRegistry;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
}
?>
Теперь вызовем метод findOneBy в контроллере:
<?php
namespace AppController;
use AppRepositoryArticleRepository;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_show')]
public function show(ArticleRepository $repo): Response
{
$res = $repo->findOneBy(['id' => 1]);
return new Response($res->getTitle());
}
}
?>
Результат выполнения кода:
"article"
Пример
Давайте найдём пользователя по имени и отсортируем результат по id:
<?php
namespace AppController;
use AppRepositoryUserRepository;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class UserController extends AbstractController
{
#[Route('/user', name: 'user_show')]
public function show(UserRepository $repo): Response
{
$res = $repo->findOneBy(
['name' => 'abcde'],
['id' => 'DESC']
);
if ($res === null) {
return new Response('user not found');
}
return new Response($res->getName());
}
}
?>
Результат выполнения кода для существующей записи:
"abcde"
Пример
Давайте обработаем ситуацию, когда запись не найдена:
<?php
namespace AppController;
use AppRepositoryArticleRepository;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/check', name: 'article_check')]
public function check(ArticleRepository $repo): Response
{
$res = $repo->findOneBy(['title' => 'hello']);
if ($res === null) {
return new Response('not found');
}
return new Response($res->getTitle());
}
}
?>
Результат выполнения кода при отсутствии записи:
"not found"
Смотрите также
-
класс
ServiceEntityRepository,
который является базовым классом репозитория -
метод
find,
который ищет запись по её идентификатору -
метод
findBy,
который ищет все записи по условиям -
метод
findAll,
который возвращает все записи репозитория