@aylo

Как через Doctrine сделать запрос поля OneToMany?

...
/**
   * @ORM\OneToMany(targetEntity="App\Entity\ShiftBreak", mappedBy="shift")
   */
private $breaks;
...


...
 /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Shift", inversedBy="shifts")
     * @ORM\JoinColumn(name="shift_id", referencedColumnName="id")
     */
    private $shift;
...


Query
$this->createQueryBuilder('s')
->select([
    's.created',
    's.name',
    's.breaks'
])
->getQuery();

При таком запросе получаю ошибку
[Semantical Error] line 0, col 99 near 'breaks FROM App\Entity\Shift': Error: Invalid PathExpression. Must be a StateFieldPathExpression.


Если убрать 's.breaks' все ок, все выводится.
  • Вопрос задан
  • 1911 просмотров
Решения вопроса 1
Minifets
@Minifets
Hello world!!!
У вас в таблице (модели "App\Entity\ShiftBreak"), нет поля breaks, соответственно вы не можете его указать в select запросе.

Чтобы получить данные из 2-х или более таблиц, нужно использовать JOIN:

$this->createQueryBuilder('s')
            ->select([
                's.created',
                's.name',
                'b.id'
            ])
            ->join('s.breaks', 'b')
            ->getQuery();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы