0

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

表:消息

  • ID
  • 文本

表:作业

  • ID
  • 评论
  • 地位

表:Assignment_User

  • ID
  • assignment_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,它就会抛出一个错误......错误:预期文字,得到 'JOIN'

为用户 X 获取所有分配的消息的正确方法是什么?

4

1 回答 1

2

Doctrine 应该已经了解您的表是如何通过实体映射关联的(如果没有,您可能需要先设置它们)。与其尝试连接整个表,然后指定表的连接对象(SQL 风格),不如直接连接,例如,au.assignment 作为 a.

此时,您还可以在联接上指定任何附加条件,例如您希望在a.status.

您可能更愿意根据您在哪个方向设置的关联来重新排序下面的连接(例如,我不知道您是否Messageassignments属性)。

$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");
于 2013-08-01T09:54:56.187 回答