Как сделать так, чтобы Laravel whereIn не сортировался автоматически

мой массив из $temp равен Array ( [0] => 22 [1] => 26 [2] => 20 [3] => 24 ) или 22|26|20|24

когда я использую whereIn вот так

$robjeks = DB::table('objek')->whereIn('id', $temp)->get();

результат 20|22|24|26|

он автоматически сортируется. Я хочу, чтобы это не сортировалось.

как сделать так же как 22|26|20|24?

Спасибо за внимание.


person Mading Ne    schedule 17.01.2017    source источник
comment
comment
каковы другие поля в таблице «objek»?   -  person mith    schedule 17.01.2017
comment
Возможный дубликат Laravel теряет порядок при запросе   -  person Amit Gupta    schedule 17.01.2017


Ответы (2)


Это не имеет ничего общего с Laravel. Сначала прочитайте здесь: избегайте сортировки по ключевому слову MYSQL IN

Затем, чтобы сделать это, вы можете использовать этот код:

$temp = [22, 26, 20, 24];
$tempStr = implode(',', $temp);
$robjeks = DB::table('objek')
    ->whereIn('id', $temp)
    ->orderByRaw(DB::raw("FIELD(id, $tempStr)"))
    ->get();

В этом случае вы можете быть подвержены риску внедрения sql-инъекций, поэтому, пожалуйста, очистите массив чисел соответствующим образом.

Ссылка: Laravel: упорядочить по месту

person Lionel Chan    schedule 17.01.2017

Я думаю, что это больше связано с SQL, чем с Laravel. Если вы используете автоинкремент id, то, очевидно, 22 находится перед 26. Если вы хотите изменить это, вы можете перейти по этой ссылке: Laravel: упорядочить по месту

Или вручную заказать свой запрос самостоятельно. например: ->orderBy('name') или что-то еще.

person EddyTheDove    schedule 17.01.2017