ホームページ >バックエンド開発 >PHPチュートリアル >Doctrine での左結合中の「予期された Doctrine\\ORM\\Query\\Lexer::T_WITH、\'ON\' を取得しました」エラーを解決するにはどうすればよいですか?
複雑なデータモデルを扱う場合、テーブル間の関係を確立して複数のテーブルからデータを取得する必要があります。左結合を使用すると、一方のテーブルからすべての行をフェッチし、もう一方のテーブルから一致する行のみをフェッチできます。
Doctrine で左結合を試行すると発生する可能性のある一般的なエラーが受信されます次の構文エラー:
[Syntax Error] line 0、col 98: Error: Expected DoctrineORMQueryLexer::T_WITH, got 'ON'
このエラーは、 「WITH」の代わりに結合句を使用します。これを解決するには、以下に示すように、「ON」を「WITH」に置き換えます:
<code class="php">$qb->leftJoin('User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id')</code>
Doctrine で左結合を実行するには、2 つの方法があります:
関連付けがある場合:
エンティティに結合したいテーブルとの関連付けがある場合は、次の構文を使用できます:
<code class="php">$qb ->select('a', 'u') ->from('Credit\Entity\UserCreditHistory', 'a') ->leftJoin('a.user', 'u') ->where('u = :user') ->setParameter('user', $users) ->orderBy('a.created_at', 'DESC');</code>
Inこの場合、「CreditEntityUserCreditHistory#user」は 2 つのエンティティ間の関連付けを表します。
関連付けなし:
関連付けが存在しない場合は、次の構文を使用できます。
<code class="php">$qb ->select('a', 'u') ->from('Credit\Entity\UserCreditHistory', 'a') ->leftJoin( 'User\Entity\User', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.user = u.id' ) ->where('u = :user') ->setParameter('user', $users) ->orderBy('a.created_at', 'DESC');</code>
このクエリは両方のテーブルからレコードを取得し、次の形式の配列を含む結果セットを返します:
<code class="php">array( array( 0 => UserCreditHistory instance, 1 => Userinstance, ), array( 0 => UserCreditHistory instance, 1 => Userinstance, ), // ... )</code>
以上がDoctrine での左結合中の「予期された Doctrine\\ORM\\Query\\Lexer::T_WITH、\'ON\' を取得しました」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。