Подтвердить что ты не робот

Doctrine2 findBy объект отношения вызывает ошибку преобразования строки

Скажем, у меня есть два объекта в Doctrine2, которые связаны друг с другом, Модели\Пользователь и Модели\Комментарий. Если я сделаю это в Doctrine 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), он работает как ожидалось.

4b9b3361

Ответ 1

Запрос по отношениям разрешен, но вы должны передать там идентификатор. Запрос по объекту еще не поддерживается и будет только в 2.1.

<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
->findBy(array('user' => $user->getId(), 'public' => true));

Ответ 2

К сожалению, я не думаю, что запрос по отношениям поддерживается напрямую через объекты репозитория.

В этом случае вы, вероятно, лучше всего написать собственный класс репозитория с помощью метода findByUser.

<?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
    }

}

Не забудьте обновить объект Comment для использования настраиваемого репозитория:

<?php

namespace App\Domain\Entity;


/** 
 * @Entity(repositoryClass="App\Domain\Repository\CommentRepository")
 */
class Comment 
{

    // entity definition

}