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

时间:2014-04-10 06:33:24

标签: php laravel eloquent

我找到了一种通过单独的模型(也称为模型,如在汽车模型中)对laravel模型进行排序的方法'命中'通过使用DB :: table函数,但我想知道如何使用Eloquent

获得相同的结果

ie(DB :: table way)

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

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

ie(如果你刚找到一个型号)

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

但显然我想要检索这个系列。对不起,我有点新鲜,我不知道怎么解释它比这更好。任何帮助表示赞赏!!!

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用Eager Load Constraints

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

答案 1 :(得分:0)

是的,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问题。