如何合并 - > isDirty()与laravel - > update()

时间:2018-02-01 03:18:02

标签: php laravel laravel-5.5

我想检查数据库中的某些列是否已更改。

我的控制器中的更新代码如下:

$tCustomer = TCustomer::withTrashed()->findOrFail($id);

$tCustomer->update(request()->all());

如何将其与 - > isDirty()函数合并?

我尝试在$tCustomer->update(request()->all());之后添加它,但它总是返回false:

$dirty = $tCustomer->getDirty('payment_method_id');

我必须在更新之前或之后添加isDirty()吗?

3 个答案:

答案 0 :(得分:1)

您可以使用fill()代替update(),先检查isDirty(),然后再检查save()。这样,您就可以利用可注入区域的优势。

$myModel->fill($arrayLikeinUpdate);
if ($myModel->isDirty()) {
    // do something
}
$myModel->save();

答案 1 :(得分:0)

您必须使用observers,在保存模型之前可以使用updating()雄辩模型事件,或者在保存模型后使用updated(),您只需在{{{{{{ 1}}模型:

TCustomer

答案 2 :(得分:-1)

isDirty返回一个bool,因此您可以将其与条件一起使用,以检查给定的模型属性是否已更改。例如:

 // modify an attribute
 $myModel->foo = 'some new value';

 ....
 // do other stuff
 ...

 // before the model has been saved
 if ($myModel->isDirty()) {
      // update model
      $myModel->save();
 }

因此,在更新(保存)模型之前需要进行检查。

调用update会在一次调用中使用给定的属性保存模型,因此您不会在该上下文中使用isDirty