Скажем, у меня есть два объекта в 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:
Уровень важности: уведомление
- Symfony2 Doctrine PDO Соединение MySQL с LOAD DATA LOCAL INFILE
- Таблица ссылок Doctrine 2 и Many-to-many с дополнительным полем
- При удалении каскада с doctrine2
- Слишком много данных с var_dump в symfony2 doctrine2
- Symfony2, Dynamic DB Connection / Раннее переопределение службы Doctrine Service
- Symfony 2 - объект Clone для разных таблиц
Сообщение: Объект класса Модели \ Пользователь для преобразования строк
Имя файла: 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));
К сожалению, я не думаю, что запрос по отношениям поддерживается напрямую через объекты репозитория.
В этом случае вы, вероятно, лучше всего написать собственный класс репозитория с помощью метода 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 }