javascript

853 经验值

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

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

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

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

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

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

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

谢谢回答!

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

问题是:
怎样才能用添加的属性 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 参与排序呢?

场景是:

在前台显示一个Users表里的tel字段时,电话号的后4位用*来替换。

我使用的方法是:

class User extends Model
{
    public function getTelAttribute () {
        return substr($this->attributes['tel'], 0, 7) . '****';
    }
}

如果这样写,一般的情况下是没问题的。

但是,当用户通过表单修改个人信息时,input中所显示的电话是

例:1391234**

我想解决的是:

在使用读取器(getAttribute)的情况下,如何在一定的条件下
一时取消到读取器(getAttribute)的动作,从而达到在表单中显示完整的电话号码呢?

想到解决的方法了。哎,是自已专牛解尖了。

前台显示时用

class User extends Model
{
    public function getSecretAttribute () {
        return substr($this->attributes['tel'], 0, 7) . '****';
    }
}


User::find($id)->selete('secret')->first();

表单里使用时,提取原字段名

User::find($id)->selete('tel')->first();