我有两个型号'用户'和'个人资料'。
'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');
}
答案 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
,但我不会这样做。