php Laravel 5.2使用Associate更新BelongsTo关系

pxy2qtax  于 2023-08-02  发布在  PHP
关注(0)|答案(2)|浏览(146)

我正在使用路由模型绑定来获取User示例,如果验证通过则更新它,然后更新User和Profile之间的关联属于关系,但我一直得到错误。更新发生在用户上,但更新配置文件时失败。从我从文档中了解到的情况来看,这似乎是正确的。我可以使用$user->profile访问Profile数据,因此在User和UserProfile模型中关系似乎是正确的。
有谁能看出这个控制器动作有什么问题吗:

  1. public function update(Request $request, User $user)
  2. {
  3. $this->validate($request, [
  4. 'username' => 'required|max:32|unique:users',
  5. 'email' => 'required|email|max:128|unique:users',
  6. 'first_name' => 'required',
  7. 'last_name' => 'required',
  8. 'phone_number' => 'regex:/^([0-9\s\-\+\(\)\.]*)$/',
  9. ]);
  10. $user->update($request->all());
  11. $profile = new UserProfile($request->all());
  12. // Also tried:
  13. //$profile = UserProfile::where(['user_id' => $user->id])->first();
  14. $user->profile()->associate($profile);
  15. $user->save();
  16. return response()->json([
  17. 'message' => trans('user.updated'),
  18. ]);
  19. }

字符串

错误

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

用户模型关系

  1. /**
  2. * A user has-one profile.
  3. *
  4. * @return \Illuminate\Database\Eloquent\Relations\HasOne
  5. */
  6. public function profile()
  7. {
  8. return $this->hasOne('App\UserProfile');
  9. }

UserProfile模型关系

  1. /**
  2. * A user profile belongs to a user.
  3. *
  4. * @return \Illuminate\Database\Eloquent\Relations\HasOne
  5. */
  6. public function user()
  7. {
  8. return $this->belongsTo('App\User');
  9. }

解答

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

2nbm6dog

2nbm6dog1#

您必须首先检索或创建新的profile实体并将其放入$profile中。此外,您在这里有一对一的关系,所以您应该像这样保存用户的配置文件:

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

字符串

vltsax25

vltsax252#

将代码更改为:

  1. public function update(Request $request, User $user)
  2. {
  3. $this->validate($request, [
  4. 'username' => 'required|max:32|unique:users',
  5. 'email' => 'required|email|max:128|unique:users',
  6. 'first_name' => 'required',
  7. 'last_name' => 'required',
  8. 'phone_number' => 'regex:/^([0-9\s\-\+\(\)\.]*)$/',
  9. ]);
  10. $profile = UserProfile::create($request->all());
  11. $user->profile()->associate($profile);
  12. $user->save();
  13. return response()->json([
  14. 'message' => trans('user.updated'),
  15. ]);
  16. }

字符串

展开查看全部

相关问题