Symfony2 / Doctrine多个连接返回错误

时间:2013-08-01 08:57:36

标签: symfony join doctrine-orm

我正在构建一个系统,其中包含可分配给(一个或多个)用户的消息。

表格:消息

  • ID
  • 文本

表格:作业

  • ID
  • 备注
  • 状态

表:Assignment_User

  • ID
  • assignment_id
  • USER_ID

表:用户

  • ID
  • 名称

现在我想检索特定用户的所有已分配消息

    $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获取所有已分配消息的正确方法是什么?

1 个答案:

答案 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");