2016-05-25 92 views
0

パフォーマンス上の理由からSTRAIGHT_JOINを使用する必要があるクエリが1つあります。クエリは次のように作成されます:LaravelのORMを使用してSTRAIGHT_JOINを作成する方法はありますか?

$query->join('tbl2 as b', function ($join) { 
      $join->on('a.b_id', '=', 'b.id') 
       ->where('b.x_id', $x); 
     }) 

STRAIGHT_JOINを使用するようにクエリを強制する方法はありますか? (INNERT JOIN、LEFT JOINなどのように)スペースがないため、これは不可能です。

答えて

-1

SELECT STRAIGHT_JOIN <cols> ...が問題を解決しているようです。これは、選択する列のリストを操作することで比較的簡単に実行でき、クエリのすべての結合に自動的に適用されます。

+0

これは試しましたか? Laravelはカラム名を引用し、 '' SELECT 'STRAIGHT_JOIN' ...' 'は動作しません... – eggyal

+0

引用を避けるにはDB :: raw()を使う必要があります。できます。 – user83358

+0

DB :: raw()を使用すると、FROM句でSTRAIGHT_JOINを使用できます。 – eggyal

2

いいえ、不可能です。

結合タイプとJOINキーワードの間にSQL、Laravelハードコード空白をコンパイルすると、あなたが言うように、STRAIGHT_JOINを使用するように説得することはできません。 Illuminate\Database\Query\Grammars\Grammar::compileJoins()を参照してください:

  $sql[] = "$type join $table on $clauses"; 

あなたはrun a raw queryする必要があります。

+0

私はこれまで、STRAIGHT_JOINをテーブルのリストに追加するのではなく、選択された列のリストに追加できることを知りました。これはLaravelクエリでは簡単です。どのように結合が構築されているか知ることは良いことです。 – user83358

+0

@ user83358:あなたは生のクエリを実行することによってのみこれを行うことができます。これは私の答えによるものです。 – eggyal

+0

生のクエリを実行せずに実行しました – user83358

関連する問題