2016-07-22 30 views
1

私は1つに結合したいさまざまなモデルを用意しています(DataTablesインスタンスへの出力用)。Laravelで複数のEloquentコレクションを組み合わせる方法

これまでのところ、私はこれを行っている(実際には約15のモデルがありますが、私はここ2を示すよ):これはうまくトリックを行っているように見えた第一印象で

$all_records = new Collection; 

$care_plan_updates = \App\CarePlanUpdate::where('resident_id', $resident->id)->where('closed','0')->get(); 
if($care_plan_updates) $all_records = $all_records->merge($care_plan_updates); 

$medication_errors = \App\MedicationError::where('resident_id', $resident->id)->where('closed','0')->get(); 
if($medication_errors) $all_records = $all_records->merge($medication_errors); 

return Datatables::of($all_records) 

。しかし、私は、マージメソッドがID値を共有するレコードを結合していることに気付きました。だから、例えば、12のIDを持つCarePlanUpdateは、私はID列を「忘れる」しようとしている12

のIDでMedicationErrorレコードによって上書きされるが、これは何の影響も与えていないようです:

if($care_plan_updates) $all_records = $all_records->merge($care_plan_updates->forget('id')); 

理想的には、重複する値を持つ行をマージすることなく、2つのコレクションを単純に組み合わせるメソッドが必要です。私は異性に慣れていないので、私が間違っているところへのガイダンスは本当に感謝しています!

答えて

3

解決策が見つかりました。

merge収集方法を使用するのではなく、個々のコレクションをループし、pushを使用して各レコードを自分のマスターに追加することにしました。これは私の目標を達成する最もエレガントな方法です。コレクション。ように:

$all_records = new Collection; 

$care_plan_updates = \App\CarePlanUpdate::where('resident_id', $resident->id)->where('closed','0')->get(); 
foreach($care_plan_updates as $care_plan_update) { 
    $all_records->push($care_plan_update); 
} 

$risk_assessment_updates = \App\RiskAssessmentUpdate::where('resident_id', $resident->id)->where('closed','0')->get(); 
foreach($risk_assessment_updates as $risk_assessment_update) { 
    $all_records->push($risk_assessment_update); 
} 
関連する問題