2016-06-13 85 views
0

我有一个用户模型和捐助者模型,其中包含捐助者类型的用户的额外数据。当用户想要更新他的个人资料时,我想同时更新这两个表。下面是代码:同时更新两个模型(Laravel 4.2)

//用户模型

public function donor() { 
    return $this->hasone('Donor','u_id'); 
} 

//捐赠型号

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

//控制器

public function updateProfile() { 
    $input = Input::all(); 
    $lat = Input::get('latitude'); 
    $lng = Input::get('longitude'); 
    $rules = array('username' => 'required|unique:users'); 
    $v = Validator::make($input, $rules); 
    $id = Auth::user()->id; 
    if ($v->fails()) { 
     return Redirect::to('donor/')->withErrors($v)->withInput(Input::all()); 
    } else { 
     $user = User::find($id); 
     $donor = User::find($id)->donor; 

     $user->username = Input::get('username'); 
     $user->name = Input::get('name'); 

     $donor->name = Input::get('name'); 
     $donor->ic = Input::get('ic'); 
     $donor->gender = Input::get('gender'); 
     $donor->blood_type = Input::get('blood_type'); 
     $donor->race = Input::get('race'); 
     $donor->religion = Input::get('religion'); 
     $donor->state = Input::get('state'); 
     $donor->address = Input::get('address'); 
     $donor->lng = $lng; 
     $donor->lat = $lat; 
     $donor->email = Input::get('email'); 
     $donor->phone = Input::get('phone'); 

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

     return View::make('donorProfile', array('message' => 'Profile successfully updated!')); 
    } 
} 

我试图按照文档和至今我去那儿。当提交bt而不是捐助者数据时,用户数据被保存。

+1

你有错误吗?检查laravel日志。 – TheFallen

+0

我在这里得到错误$ donor = User :: find($ id) - >列ID的捐助者。 – user94743

+1

好的,但是你能编辑你的文章并粘贴错误信息吗? – TheFallen

回答

0

你需要改变这样的

$user = User::find($id); 
    $donor = $user->donor()->first(); 

你的代码将现在的集合对象返回捐助$访问值$捐助模型,你需要使用它如下 - :

 $donor[0]->name = Input::get('name'); 
+0

我改变了你的答案,但我仍然错误:SQLSTATE [42S22]:未找到列:1054在where子句中未知列'id'(SQL:更新'捐献者'...) – user94743

+0

更新您的模型 - :'公共职能捐助者(){ return $ this-> hasone('Donor',[foriegn key],[primary key]); }' –

+0

如果我把这些括号[]我得到的数组字符串错误,但如果我拿出来,我仍然会有同样的错误: 公共职能捐助者(){ return $ this-> hasone('Donor' 'user_id说明', 'ID'); } SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'id'(SQL:更新'捐赠者集合'name' = ..... 我不知道这是在哪里这个ID? – user94743