gpt4 book ai didi

php - Laravel 5.2 使用 Associate 更新 BelongsTo 关系

转载 作者:搜寻专家 更新时间:2023-10-31 21:26:03 26 4
gpt4 key购买 nike

我正在使用路由模型绑定(bind)来获取用户实例,然后在验证通过时更新它,然后更新关联的属于用户和配置文件之间的关系,但我一直收到错误消息。更新发生在用户身上,但更新配置文件失败。从我从文档中了解到的情况来看,这似乎是正确的。我可以使用 $user->profile 访问个人资料数据,因此 User 和 UserProfile 模型中的关系似乎没问题。

谁能看出这个 Controller 操作有什么问题:

public function update(Request $request, User $user)
{
$this->validate($request, [
'username' => 'required|max:32|unique:users',
'email' => 'required|email|max:128|unique:users',
'first_name' => 'required',
'last_name' => 'required',
'phone_number' => 'regex:/^([0-9\s\-\+\(\)\.]*)$/',
]);

$user->update($request->all());

$profile = new UserProfile($request->all());
// Also tried:
//$profile = UserProfile::where(['user_id' => $user->id])->first();

$user->profile()->associate($profile);
$user->save();

return response()->json([
'message' => trans('user.updated'),
]);
}

错误

BadMethodCallException in Builder.php line 2161:
Call to undefined method Illuminate\Database\Query\Builder::associate()

用户模型关系

/**
* A user has-one profile.
*
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function profile()
{
return $this->hasOne('App\UserProfile');
}

UserProfile 模型关系

/**
* A user profile belongs to a user.
*
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function user()
{
return $this->belongsTo('App\User');
}

解决方案

$user->fill($request->all())->save();

$profile = UserProfile::where('user_id', $user->id)->first();
$profile->fill($request->all());
$user->profile()->save($profile);

最佳答案

您必须首先检索或创建新的 profile 实体并将其放入 $profile 中。此外,您在这里有一对一的关系,因此您应该像这样保存用户的个人资料:

$user->profile()->save($profile);

关于php - Laravel 5.2 使用 Associate 更新 BelongsTo 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35979362/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com