Doctrine2 объект отношения findBy вызывает ошибку преобразования строки - PullRequest
18 голосов
/ 06 января 2011

Скажем, у меня есть две сущности в Doctrine2, которые связаны друг с другом: Models \ User и Models \ Comment. Если я сделаю это в Doctrine 2.0.0 ...

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

... Я получаю ошибку PHP:

Серьезность: Уведомление

Сообщение: Объект класса Models \ Преобразование пользователя в строку

Имя файла: DBAL / Connection.php

Номер строки: 574

Этого не должно быть, верно? Если я использую QueryBuilder и setParameter ('user', $ user), он будет работать как положено.

Ответы [ 3 ]

31 голосов
/ 07 января 2011

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

<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
->findBy(array('user' => $user->getId(), 'public' => true));
0 голосов
/ 28 августа 2018

Для Symfony 4.1 этот код работал для меня.

$comments = $this->getDoctrine()
                ->getRepository(Models\Comment::class)
                ->findBy(
                ['user' => $user->getId(), 'public' => true]
);
0 голосов
/ 07 января 2011

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

В этом случае вам, вероятно, лучше написать собственный класс репозитория с помощью метода 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
    }

}

Не забудьте обновить сущность «Комментарий», чтобы использовать собственный репозиторий:

<?php

namespace App\Domain\Entity;


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

    // entity definition

}
...