【问题标题】:Laravel loses order when queryingLaravel 查询时丢失顺序
【发布时间】:2017-03-08 00:13:48
【问题描述】:

我有如下的 id 集合:

array:2 [
  0 => "102"
  1 => "101"
]

请注意顺序很重要。

当我像这样查询模型时:

$models = Post::whereIn('id', $keys)->get();

它失去了订单。

所以我希望 id 为 102 的帖子出现在 101 之前,但 101 最先出现。

如何强制查询生成器保持顺序

【问题讨论】:

  • IN 语句中 ID 的顺序不决定结果的顺序。您需要使用orderBy 语句来完成此操作。
  • 你能举个例子吗?
  • 这取决于,您要按什么排序结果?以防万一,文档can be found here.

标签: laravel


【解决方案1】:

你可以这样做:

$ids_ordered = implode(',', $keys);

$models = Post::whereIn('id', $keys)
              ->orderByRaw(DB::raw("FIELD(id, $ids_ordered)"))
              ->get();

参考FIELD()

【讨论】:

    【解决方案2】:

    id 列上使用orderBy() 方法

    $models = Post::whereIn('id', $keys)->orderBy('id', 'ASC')->get();

    【讨论】:

      猜你喜欢
      • 2019-01-28
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 2019-11-25
      • 1970-01-01
      相关资源
      最近更新 更多