2016-05-25 35 views
0

我有一個查詢,我需要使用STRAIGHT_JOIN出於性能原因。查詢是這樣構建的:有沒有使用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

不,這是不可能的。

在編譯SQL時,Laravel在連接類型和JOIN關鍵字之間的空格之間存在空格 - 因此,就像您說的那樣,它不能被說服使用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

相關問題