Laravel - 更新OneToOne关系

时间:2014-09-19 09:58:38

标签: php laravel laravel-4

我有两个型号'用户'和'个人资料'。

'email'字段位于用户模型中,而'name'字段位于Profile模型中。

'profiles'表的外键为'user_id'。

我搜索了很多,但无法找到一个合适的解决方案,我可以一次更新这两个实体。

在我的ProfileController中,我这样做但我确信有更好的方法。请帮忙。

public function update($id)
{
    $profile = Profile::where('id', $id);
    $profile->name = 'Jon';
    $profile->save();

    $user = User::where('id', $profile->user_id);
    $user->email = 'newjon@example.com';
    $user->save();
}

我的个人资料模型

public function user()
{
    return $this->belongsTo('User');
}

我的用户模型已

public function profile()
{
    return $this->hasOne('Profile');
}

1 个答案:

答案 0 :(得分:4)

你无法一次性完成。

然而,您可以通过利用Laravel功能(例如以一种方式执行)来简化它:

1控制器编辑

$profile = Profile::with('user')->find($id); 
// make sure you eager load the user for below to work

2查看

{{ Form::model($profile) }}
  {{ Form::text('name') }}
  {{ Form::text('user[email]') }}
{{ Form::close() }}

这将自动填充您的个人资料数据(以及用户数据)

3控制器更新

$profile = Profile::find($id);
$profile->fill(Input::only(.. fields you want to update ..));
$profile->user->fill(Input::get('user')); // array of user data form the form
$profile->push(); // save both models in one go BUT separate queries

另外,请确保您的模型上有fillable,因此fill将完成其工作。


另一种方法是使用model events,但我不会这样做。