laravel 在模型中检查,字段是否被修改过
//基本用法
if ($order->isDirty('zhuowei_id')) {
// 桌位ID被修改
$oldZhuoweiId = $order->getOriginal('zhuowei_id');
$newZhuoweiId = $order->zhuowei_id;
\Log::info("桌位ID从 {$oldZhuoweiId} 修改为 {$newZhuoweiId}");
}
// 检查任一字段是否被修改
if ($order->isDirty(['zhuowei_id', 'status', 'customer_id'])) {
// 至少有一个字段被修改
echo "有字段被修改";
}
// 检查所有指定字段是否都被修改
$fields = ['zhuowei_id', 'status', 'customer_id'];
$allDirty = true;
foreach ($fields as $field) {
if (!$order->isDirty($field)) {
$allDirty = false;
break;
}
}
if ($allDirty) {
echo "所有指定字段都被修改了";
}
示例
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\SoftDeletes;
use Slowlyo\OwlAdmin\Models\BaseModel as Model;
/**
* 座位预定
*/
class Zuoweiyuding extends Model
{
use SoftDeletes;
protected $table = 'zuoweiyuding';
// 关联分类模型
public function zhuoweigl()
{
// 参数:分类模型类名 , 你的外键字段名
return $this->belongsTo(\App\Models\Zhuowei::class, 'zhuowei_id');
}
/**
* 模型启动事件:自动处理桌位状态
*/
protected static function booted()
{
// 1. 创建预定:占用桌位
static::created(function ($order) {
if ($order->zhuowei_id) {
Zhuowei::where('id', $order->zhuowei_id)->update(['status' => 'reserved','renshu'=>$order->renshu]);
}
});
// 2. 更新预定:切换桌位(释放旧的,占用新的)
static::updated(function ($order) {
// 仅当桌位ID发生变化时执行
if ($order->isDirty('zhuowei_id','renshu')) {
$oldZhuoweiId = $order->getOriginal('zhuowei_id'); // 修改前的桌位ID
$newZhuoweiId = $order->zhuowei_id; // 修改后的桌位ID
// 释放旧桌位
if ($oldZhuoweiId) {
Zhuowei::where('id', $oldZhuoweiId)->update(['status' => 0]);
}
// 占用新桌位 ✅ 修复了变量名错误
if ($newZhuoweiId) {
Zhuowei::where('id', $newZhuoweiId)->update(['status' => 'reserved','renshu'=>$order->renshu]);
}
}
});
// 3. 删除预定:释放桌位(软删除也会触发)
static::deleted(function ($order) {
if ($order->zhuowei_id) {
Zhuowei::where('id', $order->zhuowei_id)->update(['status' => 0]);
}
});
}
//**//
}
最近访问时间:2026-04-24 19:16:42