Model 的修改器在 Model::update 时是不生效的,有没有什么技巧或者扩展包解决?

Laravel的Model::update这类批量更新的方法是不会触发Eloquent的修改器等方法的,这让我每次觉得修改器有点鸡肋,反而让开发过程提心吊胆,总要想着这个操作修改器会不会被触发。
难道只能下面这样吗?

$data = Model::where(xxxx,xx)->get();
foreach($data as $k => $item) {
    $item->xxx =xxx;
    $item->save();
}
Model::where(xxx,xxx)->firstOrFail()->update([xxx]);

我是很不愿意这样的,其实仅仅想用到修改器而已,结果迫使一个Update操作一定得先select一下,实测是两次sql请求,对数据库是不必要的负担。想问下大家是如何处理这个问题的(其实我只是希望在入库前对数据做一些格式化处理什么的)?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2
leo

在没 Select 出数据的时是不可能使用修改器的,从技术上是不可能实现的

5年前 评论

@leo 不是吧,比如一个把付款金额转成『分』入库的修改器:

public function setPaidFeeAttribute($val) {
    $this->attributes['paid_fee'] = $val * 100;
}

这不需要去查之前的数据啊,只要根据传入值做计算就可以了啊,哪怕是跨字段的,只要传入值里有指定,也是可以进行计算的。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!