Ustrine2 indevby intinfication объект триггеры строки преобразования
-
30-09-2019 - |
Вопрос
Скажем, у меня есть два объекта в доктрине2, которые связаны друг с другом, моделями пользователя и моделей комментарии. Если я сделаю это в доктрине 2.0.0 ...
<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
->findBy(array('user' => $user, 'public' => true));
... я получаю ошибку PHP:
Серьезность: замечание
Сообщение: Объект моделей классов Пользователь для конвертации строки
Имя файла: dbal / connection.php
Номер линии: 574
Это не должно происходить, верно? Если я использую QueryBuilder и SetParameter («user», $ User), он работает, как ожидалось.
Решение
Запрос с помощью отношений разрешен, но вы должны пройти идентификатор там. Запрос по объекту еще не поддерживается и будет делать только в 2.1.
<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
->findBy(array('user' => $user->getId(), 'public' => true));
Другие советы
К сожалению, я не думаю, что запрос с помощью отношений поддерживается непосредственно через объекты репозитория.
В этом случае вы, вероятно, лучше всего написать таможенный класс репозитория с методом Findbizer.
<?php
namespace App\Domain\Repository;
use Doctrine\ORM\EntityRepository,
App\Domain\Entity\User;
class CommentRepository extends EntityRepository
{
public function findByUser(User $user)
{
// add QueryBuilder code here
}
}
Не забудьте обновить свой комментарий, чтобы использовать пользовательский репозиторий:
<?php
namespace App\Domain\Entity;
/**
* @Entity(repositoryClass="App\Domain\Repository\CommentRepository")
*/
class Comment
{
// entity definition
}
Для Symfony 4.1 этот код работал для меня.
$comments = $this->getDoctrine()
->getRepository(Models\Comment::class)
->findBy(
['user' => $user->getId(), 'public' => true]
);