【发布时间】:2021-01-13 07:54:30
【问题描述】:
我在 DQL(和 SQL !)方面有一些困难。我总是写简单的查询,但现在我需要更具体的东西,但我不知道该怎么做。
我在 OneToMany 中有一个实体用户,我的实体 Program 在 OneToMany 中,我的实体 Exercice 在 OneToMany 中,我的代表。
我想知道特定用户的所有代表都已完成。 最好的方法是什么?
【问题讨论】:
我在 DQL(和 SQL !)方面有一些困难。我总是写简单的查询,但现在我需要更具体的东西,但我不知道该怎么做。
我在 OneToMany 中有一个实体用户,我的实体 Program 在 OneToMany 中,我的实体 Exercice 在 OneToMany 中,我的代表。
我想知道特定用户的所有代表都已完成。 最好的方法是什么?
【问题讨论】:
$this->createQueryBuilder('user')
->select('rep')
->join('user.programs', 'program')
->join('program.exercices', 'exercice')
->join('exercice.reps', 'rep')
->getQuery()
->getResult();
说明:
此代码必须在您的存储库中。用户存储库一。
$this->createQueryBuilder('user')
is equivalent to
$this->_em->createQueryBuilder()
->select('user')
->from('user')
你可以用第二行覆盖选择:
->select('rep')
然后按照您的问题中的描述进行连接。
programs 必须是您在用户中定义的实体属性才能加入程序 练习和代表也是如此。它们对应关系的反面。
join() 函数中的第二个参数是别名。它可以是你想要的任何东西。您在 select 和下一个 join() 中使用别名
【讨论】:
[Semantical Error] line 0, col -1 near 'SELECT rep FROM': Error: Cannot select entity through identification variables without choosing at least one root entity alias.
->select('rep') 我使用->select('rep.number') 谢谢帮助