2017-05-18 2 views
1

私のコントローラには、このような機能があります。laravelで2つの異なるモデルを使用して2回クエリを実行しますか?

$validator = Validator::make($request->all(), [ 
     'user_id' => 'required|numeric', 
     'role' => 'required', 
     'firstname' => 'required', 
     'middlename' => '', 
     'lastname' => 'required', 
     'phone_no' => 'required|digits:11', 
     'address' => 'required', 
     'city' => 'required', 
     'state' => 'required', 
     'bio' => 'required', 
     ]); 
    if ($validator->fails()) { 
     return $validator->errors(); 
    } 

そして私はこのような(モデルを使用して)最初の更新クエリを持っている:

$user = User::find($request->user_id); 
    $user->firstname = $request->firstname; 
    $user->middlename = $request->middlename; 
    $user->lastname = $request->lastname; 
    $user->phone_no = $request->phone_no; 

二つ目は次のように次の私は、データを送信するために、AJAXを使用

if($request->role == 'customer'){ 
     $userInfo = Customer::where('user_id', $request->user_id); 
     $userInfo->address = $request->address; 
     $userInfo->city = $request->city; 
     $userInfo->state = $request->state; 
     $userInfo->bio = $request->bio; 
    }elseif($request->role == 'employer'){ 
     $userInfo = Employer::where('user_id', $request->user_id); 
     $userInfo->address = $request->address; 
     $userInfo->city = $request->city; 
     $userInfo->state = $request->state; 
     $userInfo->bio = $request->bio; 
    }   

    if($user->save() && $userInfo->save()){   
     return response(array("status" => "success", 'statusCode' => 200, 'message' => 'Your Profile Was Updated'))->header('Content-Type', 'application/json'); 
    } 

コントローラ。私はそれがこのエラーを表示し、更新ボタンをクリックすると、しかし:未定義のメソッドを照らし\ Databaseへ

BadMethodCallException in Builder.php line 2451: 

コール\クエリー\ビルダー::(保存)

私はこのエラーを取得しておきます。これをどうやって解決するのですか?

答えて

1

変更以下。また、あなたが条件を満たしていない可能性があるので、保存する前にuserinfoが存在するかどうかを確認してください。

$userInfo = Customer::where('user_id', $request->user_id)->first(); 
$userInfo = Employer::where('user_id', $request->user_id)->first(); 

if($user->save() && (isset($userInfo) && $userInfo->save())){} 

また、コードをリファクタリングして、行う操作の半分を減らすことができます。しかし、それはこの質問の対象外です。

+0

私はコードの行を修正し、正常に動作しています。 'isset()'がより役に立ちます。ありがとう –

0

Call to undefined method Illuminate\Database\Query\Builder::save()結果は、コレクションではなくビルダーでsave()関数が呼び出されているためです。これは、実際にクエリを実行していないためです。

$userInfo = Employer::where('user_id', $request->user_id); 

は1つの雄弁オブジェクトの変更を保存することができます()メソッドの保存

$userInfo = Employer::where('user_id', $request->user_id)->first(); 
+0

コード行を修正して正常に動作しています。 –

0

であるべき。 あなたは$ userInfo変数Eloquentオブジェクトを持っていません。 Model上でどこを呼び出してもEloquentオブジェクトを返さない。

変更

$userInfo = Customer::where('user_id', $request->user_id)->first(); 
$userInfo = Employer::where('user_id', $request->user_id)->first(); 
関連する問題