Php Laravel:isDirty()始终返回false

Php Laravel:isDirty()始终返回false,php,laravel,eloquent,model,Php,Laravel,Eloquent,Model,我试图使用isDirty()检测模型何时得到更新,何时没有更新,是否缺少什么 $user = User::updateOrCreate(['email' => $line['Email']],[ 'username' => $line['Username'], 'fname' => $line['First_name'], 'lname' =>

我试图使用
isDirty()
检测模型何时得到更新,何时没有更新,是否缺少什么

        $user = User::updateOrCreate(['email' => $line['Email']],[
            'username'      => $line['Username'],
            'fname'         => $line['First_name'],
            'lname'         => $line['Surname'],
            'email'         => $line['Email'],
        ]);

        dd($user->isDirty()); // always return false


        User::updating(function ($user) {
            dd($user->isDirty());  // always returns true
        });

该函数用于类似以下内容:

// $user = user pulled from database
$user->isDirty(); // returns false 

$user->name = "newName";
$user->email = "newEmail@email.com";

$user->isDirty(); // returns true

$user->save();
$user->isDirty(); // returns false 

您只是查询数据库,而不是更新模型

如果您希望知道自上次从数据库同步以来模型或给定属性是否已更改,则此函数将起作用

Laravel
isDirty()
函数:

当调用
updateOrCreate
方法时,模型数据被保存。所以在调用
isDirty()
方法之后总是返回false。因为数据已经保存

User::updateOrCreate()
Laravel
updateing()
表示为更新而收集的数据,但您知道,这些数据尚未更新

使用
idDirty()

您可能会遇到这样一种情况,即您想检查给定的雄辩属性与其原始存储值相比是否发生了更改。

如果您想了解用户是
创建的
还是
更新的
,您可以执行以下操作:

如果用户已创建:

$user->最近已创建

如果用户已更新且值已更改:

$user->wasChanged()

注意,如果没有任何更改,它将返回false

我应该使用什么?我应该使用什么而不是isDirty()?有一个wasChanged()函数,它将告诉您最近是否使用->save()更新了模型。您还可以执行getChanges(),它会让您知道最近是否有任何更改(以及它们是什么)。我将参考Laravel文档以了解与您的版本的兼容性。