Laravel更新一个表单数据到不同的表使用关系?



我有一个模型用户包含下面

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

最新更新