2017-02-22 17 views
0

一言で言えば、複数の条件で結合しようとしています。私たちはレガシーLaravel 4を使用しています。私が追跡した実際のクラスはIlluminate\Database\Query\Builderです。これは、最初の$join->on()コールで正常に動作しますが、2番目onが呼び出された場合にページが失敗しLaravel 4は - > on()を複数回使用して複数の条件に参加できません

->leftJoin('node_fields AS visible_for_categories', function($join){ 
    $join->on('nv2.id', '=', 'visible_for_categories.node_version_id'); 
    $join->on('visible_for_categories.name', '=', 'visible_for_categories'); 
}) 

を:ここで私は追加していものです。なぜこれがあり、Laravel 4でこれを行う適切な方法は何ですか?次のように

答えて

0

->leftJoin('node_fields AS visible_for_categories', function($join){ 
    $join->on('nv2.id', '=', 'visible_for_categories.node_version_id') 
    ->on('visible_for_categories.name', '=', 'visible_for_categories'); 
}) 
+0

いいえ、これも失敗します(リダイレクトの束で巻き返す) –

+0

2番目の結合 'visible_for_categories.name '、' = '、' visible_for_categories''が間違っていますか? '' visible_for_categories.name '、' = '、' nv2.name''の意味ですか?それとも何か? – Nerea

0

に上記のクエリで私のために働いている方法を試してみてください:

->leftJoin('node_fields AS visible_for_categories', function($join){ 
    $join->on('nv2.id', '=', 'visible_for_categories.node_version_id'); 
    $join->on('visible_for_categories.name', '=', DB::raw("'visible_for_categories'")); 
}) 

クエリビルダは、on()機能ですべての3つの値を仮定しますフィールド、ない文字列がありますまた、.期間も解析します。

一般的には、JOINSには構造を作成するためのリレーショナル・フィールド・ジョインがあり、WHERE条件は目的のフィルタを提供します。しかし、誰もが仕事をしている人。 LEFTまたはRIGHT結合を使用すると、これが常に可能であるとは限りません。

DB::rawを使用してSQL注入に注意してください。この場合、EAVテーブルでは変数ではなく固定文字列を扱います。

関連する問題