我有一个模型用户包含下面
class User extends Authenticatable implements MustVerifyEmail
{
public function friends()
{
return $this->hasMany(Friends::class);
}
}
和好友模型包含以下
class friends extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}
控制器包含以下
public function update(ProfileUpdateRequest $request)
{
$request->user()->fill($request->validated());
$request->user()->save();
return Redirect::route('profile.edit')->with('status', 'profile-updated');
}
规则包含相关的表字段interest
,我想更新该字段,
public function rules()
{
return [
'name' => ['string', 'max:255'],
'email' => ['email', 'max:255', Rule::unique(User::class)->ignore($this->user()->id)],
'interest' => ['required', 'min:3', 'max:10000']
];
}
当我更新表单时,它只更新用户模型数据,而不是朋友模型字段interest
,有人能帮助吗?
根据您到目前为止发布的内容,我想说fill()将处理User模型的原生值。但是,如果您想要填充一对多关系的值,则必须采取额外的步骤。
一对多关系:https://laravel.com/docs/9.x/eloquent-relationships#one-to-many
在关系中插入数据:https://laravel.com/docs/9.x/eloquent-relationships#inserting-and-updating-related-models
在控制器中,您可以尝试这样做:
// import AppModelsfriends as Friend;
$request->user()->friends()->save(new Friend([
'interest' => $request->interest
]));
上面的代码添加了新的好友。要更新现有的好友,您可以这样做:
$friends = $request->user()->friends;
foreach ($friends as $friend) {
$friend->interest = $request->interest;
$friend->save();
}
如果代码不工作,检查是否"兴趣";被添加到你的"friends"中的$fillables属性中。模型。它应该通过,但如果你使用"friends::updateOrCreate"方法,如果它不在$fillables array属性中,它将不会填充。
参见质量分配:https://laravel.com/docs/9.x/eloquent#mass-assignment