Laravel where 结果顺序不正确

当 id 数组与客户表中的 id 匹配时,我想从数据库中获取记录。


这是我的 ID 数组:


0 => 1

1 => 1788

2 => 887

3 => 697

4 => 719

我有以下查询,


$customers = Customer::whereIn('id', $idArray)->get();

我得到了我需要的所有客户,但顺序不正确。我正在按以下顺序吸引客户。


1

697

719

887

1788

这是默认行为还是我做错了什么。


任何建议表示赞赏。


白猪掌柜的
浏览 109回答 1
1回答

Helenr

使用òrderByRaw查询构建器方法向查询添加原始“order by”子句。该方法的签名是$this orderByRaw(string $sql, array $bindings = [])所以它需要一个原始的 sql 查询作为参数,让我们使用DB 提供所需$ids_ordered 字符串的外观给它一个$idArray = [    0 => 1,    1 => 1788,    2 => 887,    3 => 697,    4 => 719,];$ids_ordered = implode(',', $idArray); // Basically casts the array values to a string$customers = Customer::whereIn('id', $idArray)                     ->orderByRaw(DB::raw("FIELD(id, $ids_ordered)"))                     ->get();return $customers;原始 sql 查询就像(假设MySQL 为数据库引擎)select * from `customers` where `id` in (?, ?, ?, ?, ?) order by FIELD(id, 1,1788,887,697,719)结果:[    {        "id": 1,        "created_at": "2019-09-02 12:21:15",        "updated_at": "2019-09-02 12:21:15"    },    {        "id": 1788,        "created_at": "2019-09-02 12:21:15",        "updated_at": "2019-09-02 12:21:15"    },    {        "id": 887,        "created_at": "2019-09-02 12:21:15",        "updated_at": "2019-09-02 12:21:15"    },    {        "id": 697,        "created_at": "2019-09-02 12:21:15",        "updated_at": "2019-09-02 12:21:15"    },    {        "id": 719,        "created_at": "2019-09-02 12:21:15",        "updated_at": "2019-09-02 12:21:15"    }]
打开App,查看更多内容
随时随地看视频慕课网APP