2017-07-26 81 views
0

我有一個運行Laravel 5.3的應用程序。Laravel不保存字段

我需要在一個表的修改,所有的記錄,所以這是我的代碼:

Car::all()->each(function($car){ 
    $car->created_by = 10; 
    $car->updated_by = 15; 
    $car->save(); 
}); 

的問題是,CREATED_BY領域正在被正確保存,但updated_by沒有。即使我以前對save()行我dump($car)我可以看到這兩個字段已被修改。我還將這兩個字段都添加到了$fillable(我知道,這是用於批量分配,但以防萬一..)。

+0

請分享您的「模型」,如果可能的話,遷移也是。 –

回答

0

我找到了解決方案。我的模型使用的是一種特性,每次更新模型時,它都會保存在updated_by字段中進行更新的人員,因爲我通過命令發佈了第一個代碼,因此我正在通過控制檯執行該特性,因此特性會保存該更新操作併成爲沒有用戶登錄auth() - > user()返回null,這就是保存的內容。希望我明確自己。

+1

看來你找到了解決辦法。但一般來說,使用您發佈的代碼根本沒有效率。其實它並不好。然而,因爲你想要的東西已經解決了,那就騎上去吧。 –

6

而不是檢索所有小轎車和循環圓他們,使成千上萬的查詢,你可以做大規模更新在一個查詢:

Car::update(['created_by' => 10, 'updated_by' => 15]); 

這是簡單,乾淨,更高效。

如果您需要更多信息,請通過Laravel doc,尤其是mass assignment進行詳細閱讀。

希望它有幫助。

更新

我看到更新方法不能被模型靜態調用,因此一點點黑客是說:

Car::where('id', '!=', null)->update(['created_by' => 10, 'updated_by' => 15]); 

PS:小心你的created_byupdated_by場一定不能是唯一的,否則會因爲查詢而導致錯誤Integrity constraint violation錯誤。當然,沒有人會更新一個獨特的領域。