2016-01-11 91 views
1

我遇到了問題orderByRaw Laravel。Laravel OrderByRaw column not found

陣:

$arr = [H123456, H7654321]; 

查詢:

$ids = implode(',', $arr); 
$query = User::whereIn('id', $arr)->isActive()->orderByRaw(DB::raw("FIELD(id,". $ids.")"))->get(); 

這是原始查詢:

"select * from `merchant_heads` where `id` in (?, ?) and `category_id` = ? and `status` = ? order by FIELD(id,Hf561b6fd32aec6ea,H7c81e6fa3f85fc74) limit 10 offset 0" 

我已經把這個我的用戶模型中:

public $incrementing = false; 

當我執行查詢時,它說Column not found: 1054 Unknown column 'Hf561b6fd32aec6ea' in 'order clause'

我試圖改變$ IDS的單個值,如1它的工作。但如果身份證是像我一樣的字符串,則無法工作。

任何解決方案?

回答

1

由於id是字符串,所以需要封裝它們。幸運的是,拉拉維爾可以爲你做。試試這個:

$ids = implode(',', $arr); 
$qs = array_fill(0,count($arr),'?); 
$query = User::whereIn('id', $arr)->isActive()->orderByRaw(DB::raw("FIELD(id,". implode(',', $qs).")"),$arr)->get(); 
+0

它的工作完美。如果你不介意你能解釋一下'array_fill'嗎? – ssuhat

+1

它使用您指定的長度和值創建一個數組。因此,在這種情況下,它會創建一個具有問號/佔位符數量的數組,因爲您有ID。有關該功能的信息,請訪問http://php.net/manual/en/function.array-fill.php。 – aynber

+0

謝謝!你搖滾! – ssuhat