laravel 中的读取器(getAttribute)属性可以参与排序吗?

问题是:
怎样才能用添加的总分数(total)属性进行排序

场景:

Users表

ID | 姓名 | 语言 | 数学 | 英语
-----------------------------------------
1  | 张三  | 99  | 78  | 66
-----------------------------------------
2  | 李四  | 50  | 100 | 87
-----------------------------------------
3  | 王五  | 88  | 91  | 87

添加的属性 总分数(total)

class User extends Model
{
    protected $appends = ['total'];

    public function getTotalAttribute () {
        $yuwen = $this->attributes['yuwen'];
        $shuxue = $this->attributes['shuxue'];
        $yingyu = $this->attributes['yingyu'];
        return $yunwen + $shuxue + $yingyu;
    }
}

如果语文的分数排序时是:

class UserController extends Controller
{
    public function userListApi()
    {
        $datas = User::orderBy('yuwen', 'dsec')->paginate(10);
        return response()->json($datas);
    }
}

怎么样才能让添加的属性 total 参与排序呢?

一只萌萌小番薯
浏览 748回答 3
3回答

莫回无

楼上说的差不多了;Collection 也可以降序排..

胡子哥哥

如果是要查询数据库时的排序, 你需要手工添加一个字段, ->select(DB::raw('几个字段相加 as total'))->orderby('total'); 如果是查出来后, 再排序, 那可以使用 Collection::sortBy() 函数排序.

蛊毒传说

如果getAttribute 是一个比较复杂逻辑取出来的数据, 可以直接用 getAttribute 排序么?
打开App,查看更多内容
随时随地看视频慕课网APP