我的数据库中有一个“full_name”列,但我的数据库中没有“first_name”和“last_name”列 .
这是我的表格:
<form method="POST" action="">
<input type="text" name="first_name">
<input type="text" name="last_name">
</form>
这是我的模特:
class User extends Model
{
protected $guarded = ['first_name', 'last_name'];
public function setFullNameAttribute()
{
$this->attributes['full_name'] = $this->attributes['first_name'].' '.$this->attributes['last_name'];
}
}
这是我的控制器类中的代码
public function store(StoreUser $request)
{
$validated = $request->validated();
$user = Auth::user();
$user->update($validated);
}
提交表单后,出现错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'first_name' in 'field list'
我知道是什么原因造成的,是因为 $guarded = ['first_name', 'last_name']
但如果我没有守卫那些领域,那就有一个错误:
"Undefined index: first_name"
我知道原因是什么,因为我的数据库中没有“first_name”列 .
所以我卡住了,不知道如何将“full_name”更新到数据库中,并防止分配“first_name”和“last_name”字段 .
PS,我不使用 $user->save()
是因为在现实世界中需要更新质量分配 .
2 回答
最简单的解决方案是:
存储功能如下所示:
控制器角色是使输入适应您的模型/存储库 .
您的模型应仅反映数据:
你的控制器
但是如果你想继续使用你的方法,我建议你过度使用更新方法