【问题标题】:Symfony2 / Doctrine multiple joins returns errorSymfony2 / Doctrine 多重连接返回错误
【发布时间】:2013-08-01 08:57:35
【问题描述】:

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

表格:消息

  • 身份证
  • 文字

表格:作业

  • 身份证
  • 备注
  • 状态

表:Assignment_User

  • 身份证
  • assignment_id
  • user_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 获取所有分配的消息的正确方法是什么?

【问题讨论】:

    标签: symfony join doctrine-orm


    【解决方案1】:

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

    此时,您还可以在加入时指定任何其他条件,例如您希望在a.status 上。

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

    $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");
    

    【讨论】:

      猜你喜欢
      • 2015-08-06
      • 1970-01-01
      • 2016-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多