0

(1 人以上の) ユーザーに割り当てることができるメッセージを含むシステムを構築しています。

表: メッセージ

  • ID
  • 文章

表: 課題

  • ID
  • 述べる
  • 状態

表: Assignment_User

  • ID
  • 割り当て_id
  • ユーザー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");

2 番目の JOIN を追加するとすぐに、エラーがスローされます... エラー: リテラルが予期され、'JOIN' を取得

ユーザー X に割り当てられたすべてのメッセージを取得する正しい方法は何ですか?

4

1 に答える 1

2

Doctrine は、エンティティ マッピングを通じてテーブルがどのように関連付けられているかを既に理解しているはずです (そうでない場合は、最初にそれらを設定する必要があるかもしれません)。テーブル全体を結合してからテーブルを結合する対象を指定する (SQL スタイル) のではなく、au.assignment たとえば 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");
于 2013-08-01T09:54:56.187 に答える