首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel5.2使用关联更新BelongsTo关系

Laravel5.2使用关联更新BelongsTo关系
EN

Stack Overflow用户
提问于 2016-03-14 04:04:25
回答 2查看 12.2K关注 0票数 4

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

有人能看到这个控制器操作有什么问题吗?

代码语言:javascript
复制
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'),
    ]);
}

误差

代码语言:javascript
复制
BadMethodCallException in Builder.php line 2161:
Call to undefined method Illuminate\Database\Query\Builder::associate()

用户模型关系

代码语言:javascript
复制
/**
 * A user has-one profile.
 *
 * @return \Illuminate\Database\Eloquent\Relations\HasOne
 */
public function profile()
{
    return $this->hasOne('App\UserProfile');
}

UserProfile模型关系

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

溶液

代码语言:javascript
复制
$user->fill($request->all())->save();

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-14 04:12:28

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

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

票数 2
EN

Stack Overflow用户

发布于 2016-03-14 05:04:54

将代码更改为:

代码语言:javascript
复制
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\-\+\(\)\.]*)$/',
    ]);

    $profile = UserProfile::create($request->all());

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

    $user->save();

    return response()->json([
        'message' => trans('user.updated'),
    ]);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35979362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档