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 参与排序呢?

javascript 回复 fengdie

谢谢回答!

我试了一下,如果用collection的sortBy的话
->paginate(10)方法就用不了了啊?!

fengdie

试试看$datas = User::orderBy(‘yuwen’, ‘dsec’)->paginate(10)->sortBy(‘total’);

javascript 回复 fengdie

->paginate(10)->sortBy(‘total’);

这样是不是只是10笔数据的 total 排序呢?

javascript

->paginate(10)->sortBy(‘total’);

这样是不是只是10笔数据的 total 排序呢?

javascript

->paginate(10)->sortBy(‘total’);

这样是不是只是10笔数据的 total 排序呢?

fengdie

是,其实你可以加上total字段。然后利用model的event事件,在saving里面计算total值

javascript 回复 fengdie

嗯。这到是一个好办法!谢谢啦!

javascript 回复 fengdie

找到一个解决这类问题的好方法,特来和你分享一下!
利用 Eloquent 中的 orderByRaw
User::orderByRaw(’(yuwen + shuxue + yingyu) desc’)->paginate(10);

fengdie 回复 javascript

谢谢…