Ustrine2 indevby intinfication объект триггеры строки преобразования

StackOverflow https://stackoverflow.com/questions/4619071

  •  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]
);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top