2016-09-01 135 views
1

關於Laravel 5.3的一個變化,現在保存()返回false在Laravel 5.3

現在,我有一個模型,我想保存。

之前,我是做:

$result = $model->save(); 

而且我也知道,如果操作成功。

現在,隨着新:

能言善辯的保存方法現在如果模型尚未因爲它被檢索或保存最後一次改變返回false。

upgrade guide

如果模型沒有改變提及,它返回false。

現在我的代碼告訴我有一個錯誤,因爲我相信真或假是好的或壞的操作的結果。

所以現在,我怎樣才能檢查save()是否成功,即使它沒有改變數據?

+0

哪裏它說,它在5.3返回false? – Sherif

+0

https://laravel.com/docs/5.3/upgrade#upgrade-5.3。0 –

+2

完整的引用比上面的無上下文引用更有意義如果自上次檢索或保存模型以來模型沒有發生變化,Eloquent保存方法現在返回false。似乎意味着如果您加載模型並立即使用'save()'它會返回false而不是真實的。 – Blake

回答

3

檢查您的模型是否髒。

//    A     B 
$result = !$model->isDirty() || $model->save() 
  • 如果你的模型進行了改進,Afalse,但B應該是true。所以$resulttrue
  • 如果您的模型沒有修改,Atrue,所以$result將成立。
  • 如果您的模型被修改並且未保存成功,您將在AB中獲得false,因此$result將爲false。

我解釋一下:這是因爲口才只是做了一個DB查詢IF事情發生了轉變。 Laravel開發人員決定更改save()響應,因此現在您可以知道是否進行了查詢,或者是否有任何更改。


據@patricus評論,第一個解決方案將不會觸發saving()updating事件,一個明顯的原因:當找到truePHP儘可能多的語言將停止評估一個或表達式。

所以如果你需要觸發這個事件,你應該這樣做:

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

這個方法有兩個注意事項。首先,如果模型中存在'save()'事件,則此方法將防止在模型不髒時調用該方法。其次,如果試圖向數據庫中插入一個新的空記錄,該方法將阻止該記錄。 – patricus

+0

另外,如果你喜歡用''isClean()'方法,那麼模型有''! isDirty()'。 – patricus

+0

@patricus新增了一個新答案 –