Laravel中的自定义排序取决于列值

时间:2018-06-08 10:44:56

标签: mysql sql database laravel eloquent

我想对表条目进行排序。这是Eloquent模型。

namespace App;

use Illuminate\Database\Eloquent\Model;

/**
 * App\Story
 ...
 * @property string $due_date
 * @property string $status late|scheduled|completed
 ...
 */
class Story extends Model {
    ...
}

我想要返回故事的顺序是:

  • “迟到”是ASC(旧的第一个)
  • DSC中的
  • “预定”(新的第一个)
  • DSC中的
  • “已完成”(新的第一个)

因此,假设每个状态类型的故事在db中有15个条目。并且分页限制设置为20。

所以这是每个页面的响应

  • 首页:ASC订单中的15个晚期故事+ DSC订单中的前5个预定故事
  • 第二页:剩余的10个预定故事+ DSC订单中的前10个完成故事
  • 第三页:剩下5个已完成的故事

如果上面提供的信息不充分,请告诉我。谢谢!

2 个答案:

答案 0 :(得分:1)

不理想,但没有Thread.CurrentThread.Abort()列:

factor

当乘以整数时,Story::orderByRaw('FIELD(status, "late", "scheduled", "completed")') ->orderByRaw('(CASE WHEN status = "late" THEN 1 ELSE -1 END) * due_date') ->paginate(10); 会自动转换为字符串(due_date)。所以它应该比20180609快。

答案 1 :(得分:0)

在某些情况下,您可能希望为特定列使用自定义顺序sql。为此,您可以使用orderColumn api。

在此示例中,我们将使用空值对列名进行排序。

use DataTables;

Route::get('user-data', function() {
$model = App\User::query();

return DataTables::eloquent($model)
            ->orderColumn('name', '-name $1')
            ->toJson();
});