laravel 在模型中检查,字段是否被修改过
xuexi 2026-04-24 14:36:20 发表在:PHP 查看数:4
//基本用法
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
知识库:450条鸣谢:TAY  备案号:蜀ICP备2024090044号