Laravel:isDirty()总是返回false

时间:2019-10-02 12:47:37

标签: php laravel eloquent model

我正在尝试使用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
        });

4 个答案:

答案 0 :(得分:1)

该函数用于更多类似这样的事情:

// $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 

答案 1 :(得分:0)

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

如果您想知道自数据库上次同步以来 model 或给定属性是否已更改,

isDirty 函数将起作用。

答案 2 :(得分:0)

Laravel isDirty()函数:

调用updateOrCreate方法时,将保存您的模型数据。因此,在调用isDirty()之后,方法始终返回false。因为数据已经保存。

User::updateOrCreate()

Laravel updating()表示为更新而收集的数据,但您知道的不是更新的。

使用idDirty() 您可能会想出一种情况,要检查给定的Eloquent属性与原始存储值相比是否已更改。

答案 3 :(得分:0)

如果要确定用户是created还是updated,则可以执行以下操作:

如果创建了用户:

$user->wasRecentlyCreated


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

$user->wasChanged()

请注意,如果未进行任何更改,它将返回false