问题
my array from $temp is Array ( [0] => 22 [1] => 26 [2] => 20 [3] => 24 ) or 22|26|20|24
when I use whereIn like this
$robjeks = DB::table('objek')->whereIn('id', $temp)->get();
the result is 20|22|24|26|
it's automatically sorted. I want it's not sorted.
how to make it same like 22|26|20|24?
thanks for your attention.
回答1:
This has nothing to do with Laravel. Read here first: avoid Sorting by the MYSQL IN Keyword
Then, to do this, you can use this code:
$temp = [22, 26, 20, 24];
$tempStr = implode(',', $temp);
$robjeks = DB::table('objek')
->whereIn('id', $temp)
->orderByRaw(DB::raw("FIELD(id, $tempStr)"))
->get();
You might be in risk with sql injection in this case, so please sanitize the array of numbers accordingly.
Ref: Laravel: order by where in
回答2:
I think it has more to do with SQL rather than Laravel. If you are using autoincrement id, then obviously 22 is found before 26. If you want to change that you may follow this link:
Laravel: order by where in
Or manually order your query yourself. eg.: ->orderBy('name') or something else.
来源:https://stackoverflow.com/questions/41688648/how-to-make-laravel-wherein-not-sorted-automatically