根据子表中的字符串值对有说服力的结果排序


DB::table('cases')
->select('cases.*',DB::raw('courts.*'))
->leftjoin('Courts', 'cases.court_id', '=', 'Courts.id')
->orderByRaw("FIELD(court, 'supreme court','high court','area court')")
->get();

上述查询的结果是按courts表中courts列的字符串值排序的。请使用雄辩的查询如何做到这一点。我试过

控制器

return Cases::with('courts')
->orderby(

Courts::select('court')
->whereColumn('id','cases.court_id')
->orderByRaw("FIELD(court, 'high court','supreme court','area court')")
->limit(1)
)
->get();

如果您想限制如何完成急切的老模型的查询,文档会为您提供一个很好的示例Eloquent Relationships-Constraining Eagle Loads。

return Cases::query()
->with(['courts' => function ($query) {
$query->select('court', 'court_id')
->orderByRaw("FIELD(court, 'high court', 'supreme court', 'area court')");
}])
->get();

几个限制:

  • 需要在select子句中包含外部列(court_id(,因为这就是Eloquent将如何将每个Court模型与其对应的Cases关联起来的方法
  • 不能在查询约束中使用LIMIT,因为这将对每个热切加载的Court模型产生影响,而不仅仅是与每个特定Cases关联的模型

最新更新