现在save()在Laravel 5.3中返回false

时间:2016-09-01 21:41:43

标签: php laravel

关于Laravel 5.3的一次更改,

现在,我有一个我想保存的模型。

之前,我在做:

for each (seg in xmlResponse.OBR.children()) {
    if (seg.name().toString() == "SEG") {
        var sample_value = seg['SEG.1']['SEG.1.1'].toString();
    }
}

我可以知道操作是否成功。

现在,使用新的:

  

如果自上次检索或保存模型以来模型尚未更改,则Eloquent save方法现在返回false。

upgrade guide

中提及

如果模型没有改变,则返回false。

现在我的代码告诉我有一个错误,因为我相信真或假是操作好坏的结果。

现在,我怎样才能检查save()是否成功,即使它没有改变数据???

1 个答案:

答案 0 :(得分:4)

检查您的型号是否脏。

//               A                    B
$result = !$model->isDirty() || $model->save()
  • 如果您的模型已修改,A将为false,但B应为true。因此$result将为true
  • 如果您的模型未被修改,A将为true,因此$result将为真。
  • 如果您的模型已修改且未成功保存,则falseA都会B $result,因此save()将为假。 / LI>

我解释一下:这是因为Eloquent只是做了一个数据库查询 IF 更改了一些内容。 Laravel开发人员决定更改saving()响应,现在您可以知道是否进行了查询,或者是否有任何更改。

根据@patricus的评论,第一个解决方案不会触发updatingtrue事件,原因很明显: PHP,因为许多语言会在{{}时停止评估OR表达式找到{1}}。

因此,如果您需要触发此事件,则应执行以下操作:

$wasClean = $model->isClean(); // The oposite of 'isDirty()'
$result = $model->save() || $wasClean;