按单独的模型实体对Laravel模型中的所有结果进行排序


Sort All Results In Laravel Model By Separate Model Entity

我已经找到了一种方法,通过使用DB::table函数,按照单独的模型(也称为模型,如汽车模型)的"命中率"对laravel模型进行排序,但我想知道如何使用Eloquent only 获得相同的结果

即(DB::表格方式)

DB::table('series')
->join('model','model.series_id','=','series.id')
->orderBy('model.hits', 'asc')
->get();

这将返回一个stdClass对象数组,但我想找到一种方法将其作为Model对象数组返回,Model再次引用名为Model的模型(很抱歉造成混淆)。

即(如果你只找到一个型号)

Model::orderBy('hits', 'asc')->get();

但很明显,我想找回这个系列。对不起,我有点新,我不知道该怎么解释才能比这更好。感谢您的帮助!!!

您尝试过使用Eager Load Constraints吗?

Series::with(array('models' => function ($query) {
    $query->orderBy('hits');
}))->get();

是的,DB::将返回stdObjects,但您可以很容易地使用Eloquent:执行同样的操作

// Assuming your models are Serie.php and 
// Hit.php, with table hits: id, count, serie_id ...
Serie::join('hits', 'hits.serie_id', '=', 'series.id')
  ->orderBy('hits.count', 'asc')
  ->get();

这将返回Eloquent Collection。

急切的加载在这里不起作用,因为它没有加入表格,所以你最终会为每个系列赛订购相关的热门,但这不会影响系列赛的顺序。

然而,如果你仍然需要每个系列的相关模型(命中),那么也可以使用热切加载来避免n+1问题。