我正在构建一个系统,其中包含可分配给(一个或多个)用户的消息。
表格:消息
表格:作业
表:Assignment_User
表:用户
现在我想检索特定用户的所有已分配消息
$qb->select('DISTINCT m')
->from('MessageBundle:Assignment', 'a')
->join('MessageBundle:Message', 'm')
->join('MessageBundle:AssignmentUser', 'au')
->where('a.message = m')
->andWhere('au.assignment = a')
->andWhere('a.status = (:assigned)')
->setParameter('assigned', 'assigned')
->orderBy("mr.createdAt", "desc");
只要我添加第二个JOIN就会抛出错误... 错误:预期文字,得到'加入'
为用户X获取所有已分配消息的正确方法是什么?
答案 0 :(得分:2)
Doctrine应该已经了解了你的表如何通过实体映射关联(如果没有,你可能需要先设置它们)。而不是尝试连接整个表然后指定表连接的内容(SQL风格),只需加入au.assignment
作为 a
。
此时,您还可以在加入时指定任何其他条件,例如您想要a.status
。
您可能更愿意重新排序以下联接,具体取决于您在哪些方向设置的关联(例如,我不知道您的Message
是否具有assignments
属性。) p>
$qb->select('DISTINCT m')
->from('MessageBundle:AssignmentUser', 'au')
->innerJoin('au.assignment', 'a', 'WITH', 'a.status = (:assigned)')
->innerJoin('au.user', 'u')
->innerJoin('a.message', 'm')
->where('u.id = (:user_id)')
->setParameter('assigned', 'assigned')
->setParameter('user_id', $yourSpecificUserId)
->orderBy("m.createdAt", "desc");