我正在使用路由模型绑定来获取User示例,如果验证通过则更新它,然后更新User和Profile之间的关联属于关系,但我一直得到错误。更新发生在用户上,但更新配置文件时失败。从我从文档中了解到的情况来看,这似乎是正确的。我可以使用$user->profile
访问Profile数据,因此在User和UserProfile模型中关系似乎是正确的。
有谁能看出这个控制器动作有什么问题吗:
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);
型
2条答案
按热度按时间2nbm6dog1#
您必须首先检索或创建新的
profile
实体并将其放入$profile
中。此外,您在这里有一对一的关系,所以您应该像这样保存用户的配置文件:字符串
vltsax252#
将代码更改为:
字符串