为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
一只萌萌小番薯 2019-03-10 11:59:25
问题是:怎样才能用添加的总分数(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 参与排序呢?
查看完整描述

3 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

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

查看完整回答
反对 回复 2019-03-18
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

如果是要查询数据库时的排序, 你需要手工添加一个字段, ->select(DB::raw('几个字段相加 as total'))->orderby('total');

如果是查出来后, 再排序, 那可以使用 Collection::sortBy() 函数排序.

查看完整回答
反对 回复 2019-03-18
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

如果getAttribute 是一个比较复杂逻辑取出来的数据, 可以直接用 getAttribute 排序么?

查看完整回答
反对 回复 2019-03-18
  • 3 回答
  • 0 关注
  • 747 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信