2017-05-31 52 views
1

私は例外の列が存在しませんが、列が既にデータベースに存在する場合、orderByRaw関数を使用するとEloquent/QueryBuilderに問題があります。ここLaravel 5、orderByRawフィールドと列が使用されていません

は例外である:

SQLSTATE[42883]: Undefined function: 7 ERROR: function field(integer, integer) does not exist 
HINT: No function matches the given name and argument types. You might need to add explicit type casts. 

データベースにステータス列は整数です。私はusers.statusを使用する場合、私は同じエラーを得た、も...

$orderedStatuses = implode(',', [4]); 
$users->orderByRaw(\DB::raw("FIELD(status, $orderedStatuses)")); 

: はここに私のコードです。

誰かが私を助けることができますか?

+0

'orderByRaw'はすでに生のSQLを期待しています。内部で 'DB :: raw'を使う必要はありません。 – fubar

+0

さらに、fubarが書いたものに対して、MySQL [FIELD()](https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_field)関数は文字列を引数として受け入れます。あなたは、明らかに整数を渡しています。エラーメッセージには、あなたが言及した存在しない列について何も言わない。これは誤って使われている関数です。 – lesssugar

答えて

0

orderByRawは生のSQLを期待

おかげで、あなたはorderByRawの引数に文字列を渡す必要があります。

例:

$users->orderByRaw('field1 ASC, field2 DESC, field3 DESC,...'); 
1

あなたは両方の方法を混合しました。

$users->orderBy(\DB::raw("FIELD(status, $orderedStatuses)")); 

それとも

$users->orderByRaw("FIELD(status, $orderedStatuses)"); 
関連する問題