需求场景,当订单表中的快递公司,或者快递单号发生改变时,更新快递表中的相关字段。
要满足这个需求,就需要能知道订单 Model 更新时,是否修改了这两个字段。
解决方法是使用 getChanges 方法,例如:
$order->express_company = '顺丰';
$order->save();
Log::info($order->getChanges());
[2019-01-24 09:46:01] local.INFO: array (
'express_company' => '顺丰',
'updated_at' => '2019-01-24 09:46:00',
)
然后就可以加对应的判断逻辑了
if (array_key_exists('express_company', $changes) ||
array_key_exists('express_id', $changes)) {
// do something
}
getChanges 与 getDirty 的区别
- getDirty 需要在 save 前调用
- 而 getChanges 在 save 后调用。
在 Laravel Tinker 中测试一下:
>>> use App\Models\Order;
>>> $order = Order::find(3);
>>> $order->notes = "带两根大葱";
=> "带两根大葱"
>>> $order->getDirty();
=> [
"notes" => "带两根大葱",
]
>>> $order->getChanges();
=> []
>>> $order->save();
=> true
>>> $order->getDirty();
=> []
>>> $order->getChanges();
=> [
"notes" => "带两根大葱",
"updated_at" => "2019-01-24 12:05:40",
]
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式