2017-02-09 20 views
0

異なるテーブルデータを取得して配列に保存したいと考えています。異なるテーブルデータをlaravelの同じ配列にマージする

$int_payment = IntPayments::where('month',$month_year)->groupBy('interviewer_id')->get(); 

    foreach ($int_payment as $inter) { 
     $inters[] = User::where('id',$inter->interviewer_id)->get(); 
     $inters['payment_status'] = $inter->payment_status; 

    } 
    return response()->json(['inters'=>$inters,'month'=>$month]); 

ここでは、int_paymentテーブルからのinterviewer_idからユーザーのテーブル内のユーザーの名前を取得しています。今や$inters[]には特定のユーザーのすべてのデータが含まれています。今私は、int_paymentsテーブルから1つの列を取り出し、$ inters配列に追加したいと思います。上記のコードは期待どおりに動作しません。それはこれをもたらす。上記のコードでは、支払いステータスが最初の配列値に追加され、他の配列値には追加されません。この

{"inters":{"0":[{"id":1,"name":"Naveen1","phone":"7841237900",}],"payment_status":"unpaid","1":[{"id":2,"name":"john","phone":"7845123900",}]}} 

{"inters":{"0":[{"id":1,"name":"Naveen1"}],"payment_status":"unpaid",} 

のようなしかし、私は、私はあなたがこのような何かがしたいという正しくあなたを得た場合、それはこの

{"inters":{"0":[{"id":1,"name":"Naveen1","payment_status":"unpaid"}],} 
{"inters":{"1":[{"id":2,"name":"john","payment_status":"paid"}],} 

答えて

0

のような配列の内側に含めることにしたい。

{"inters":{"0":[{"id":1,"name":"Naveen1","payment_status":"unpaid"}],} 

あなたが持っているコレクションのpushを参考にしてください:

$int_payment = IntPayments::where('month',$month_year)->groupBy('interviewer_id')->get(); 

foreach ($int_payment as $key => $inter) { 
    $inters = User::where('id',$inter->interviewer_id)->get(['id', 'name']); 
    $inters_payment[] = $inters->push(['payment_status' => $inter->payment_status]); 
} 

return response()->json(['inters'=>$inters_payment,'month'=>$month]); 

ところで、私はこの$month変数が機能する場所はわかりませんが、私はあなたのサンプルコードのように残しました。

しかしながら、1つの警告は、UserIntPaymentsモデルの間の相互作用に対応するためにlaravelの関係を採用しないのはなぜですか?私が観察できるように、何千ものIntPaymentsが返された場合、この関数のためには、usersテーブルで何千ものクエリを実行するでしょう。あなたはこのようにシンプルでエレガントな何か持っている可能性があり

return response()->json(['inters'=> $result]); 

$inters = IntPayments::where('month',$month_year)->groupBy('interviewer_id')->with('user')->get(); 
    $result = []; 
    foreach($inters as $key => $inter) 
    { 
     $result[$key]['id'] = $inter->user->id; 
     $result[$key]['name'] = $inter->user->name; 
     $result[$key]['payment_status'] = $inter->payment_status; 
    } 

を次に、あなたとあなたの応答を持つことができます

関連する問題