我正在尝试为Model的属性设置新值,但是它不起作用。设置新值后,我会立即使用dd(),但它会保留旧值。
$business->users()
->where('userable_id', $business->id)
->where('userable_type', 'App\Models\Business')
->first()->first_name = "New";
答案 0 :(得分:7)
尝试以下方法:
$business->users()
->where('userable_id', $business->id)
->where('userable_type', 'App\Models\Business')
->first()->update(['first_name' => "New"]);
像$model->attribute = 'foo';
这样的直接对象属性分配只会影响内存中的状态,而不会在数据库中进行更改。
所以你要么去
$model->update(['attribute' => 'value']);
或
$model->attribute = 'value';
$model->save();
更新1:
正如我在回答的注释中所写,有时first()
可能会返回null
,如果找不到任何模型。我想建议firstOrFail()
。
请注意,predefined handler类(firstOrFail()
抛出)没有ModelNotFound
,因此您想在Handler
类中手动处理此类错误,否则您将获得默认的404 Laravel页面。
答案 1 :(得分:2)
$business->users()
->where('userable_id', $business->id)
->where('userable_type', 'App\Models\Business')
->first()->update(['first_name' => 'New']);
答案 2 :(得分:0)
在->first()
方法之后立即访问方法/字段是非常糟糕的做法。
如果未找到模型,则PHP会引发错误,因为您正尝试使用null
值访问方法/属性。
改为使用
$user = $business->users()
->where('userable_id', $business->id)
->where('userable_type', 'App\Models\Business')
->first();
$user->first_name = 'New';
$user->save();
// or, if 'first_name' is in your model $fillable array
$user->update(['first_name' => 'new' ]);