Как осуществить поиск по реляционному полю в Doctrine?

Делаю запрос в базу данных
$query = $records->createQueryBuilder('d')
                ->orderBy('d.id', 'ASC')
                ->where('d.version_id = :version')
                ->setParameter('version', $version)
                ->getQuery();

При этом возникает ошибка:
Semantical Error] line 0, col 43 near 'version_id =': Error: Class App\Entity\Records has no field or association named version_id
Но в таблице явно есть такой столбец
610ffcf416895241006434.png
Также запрос без where который строится автоматически использует version_id
$query = $records->createQueryBuilder('d')
                ->orderBy('d.id', 'ASC')
                ->getQuery();

SELECT r0_.id AS id_0, r0_.title AS title_1, r0_.link AS link_2, r0_.description AS description_3, r0_.visible AS visible_4, r0_.version_id AS version_id_5 FROM records r0_ ORDER BY r0_.id ASC

С остальными полями where работает нормально, как правильно использовать с полем типа relation
  • Вопрос задан
  • 303 просмотра
Решения вопроса 1
@D3lphi
Когда вы работаете с ORM и пишете запросы с помощью query builder'а (или DQL), для вас не существует такого понятия как "столбец". Вы работаете с маппингом таблиц на сущности. Следовательно, в вашем распоряжении имеются поля сущности. В query builder'е вы обращаетесь к полям сущности, а не к столбцам таблицы. Чтобы обратиться к внешнему ключу сущности (например, составить условие без джоина отношения), используется встроенная в DQL функция IDENTITY(). В вашем случае это будет выглядеть примерно так:
$query = $records->createQueryBuilder('d')
                ->orderBy('d.id',  'ASC')
                ->where('IDENTITY(d.version) = :version')
                ->setParameter('version', $version)
                ->getQuery();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы