订购指定列的Eloquent结果

时间:2015-05-04 09:32:33

标签: php laravel laravel-5

订购Eloquent收集结果时遇到问题。这是我的初始代码:

class Major extends Eloquent {

    protected $table = 'majors';

    /**
    * Gets all active majors
    *
    * @param $orderField Field by which the collection should be ordered
    * @param $orderDirection Direction of ordering
    */
    public static function getAllActive($orderField = 'order', $orderDirection = 'asc') {
        $columns = array('id', 'name_de', 'name_en', 'name_'.Config::get('app.locale').' as name', 'active');
        return self::all($columns)->where('active', 1);
    }
}

获得专业的方法很好。现在,我想按特定字段对结果进行排序,因此我将返回更改为:

return self::all($columns)->where('active', 1)->orderBy($orderField, $orderDirection);

代码抛出以下错误:

调用未定义的方法Illuminate \ Database \ Eloquent \ Collection :: orderBy()

我需要保留$columns变量,因为我需要name列别名。如何正确订购Eloquent结果?

2 个答案:

答案 0 :(得分:1)

all执行查询并返回一个集合。您可以使用select方法:

self::whereActive(1)
    ->orderBy($orderField, $orderDirection)
    ->select($columns)
    ->get();

答案 1 :(得分:1)

好的,想通了。我们的想法是首先订购集合,然后选择列:

return self::orderBy($orderField, $orderDirection)
            ->select($columns)
            ->where('active', 1)
            ->get();

此外,Vohuman的回答也是完全有效的。