我想将各种模型组合成一个模型(用于输出到DataTables实例中)。
到目前为止,我已经做到了这一点(实际上大约有15个型号,我只是在这里展示了两个):
$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)
在第一印象中,这似乎完成了诀窍。但是,我注意到merge方法组合了共享ID值的记录。因此,例如,ID为12的CarePlanUpdate被ID为12的MedicationError记录覆盖。
我试过'忘记'ID列,但这似乎没有任何影响:
if($care_plan_updates) $all_records = $all_records->merge($care_plan_updates->forget('id'));
理想情况下,我想要一种简单地组合两个集合而不会将行与重复值合并的方法。我是Eloquent的新手 - 所以对我出错的地方的任何指导都会非常感激!
答案 0 :(得分: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);
}