为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Eloquent 将集合中的元素合并到一个数组中

如何使用 Eloquent 将集合中的元素合并到一个数组中

PHP
海绵宝宝撒 2023-04-28 14:11:28
我正在尝试以下操作:我正在使用以下函数获取与我的患者相关的所有 clinic_tests:public function getPatientsClinicTests(Specialist $id)  {        $patientClinicTests = $id->patients()            ->with('PatientClinicTests', 'PatientClinicTests.Patient.User')            ->get()            ->pluck('PatientClinicTests')            ->filter(function ($value) { return !empty($value); });        $result = [];        foreach ($patientClinicTests as $array) {            $result = array_merge($result, $array->toArray());        }        return $result;    }第一组代码:$patientClinicTests = $id->patients()                ->with('PatientClinicTests', 'PatientClinicTests.Patient.User')                ->get()                ->pluck('PatientClinicTests')                ->filter(function ($value) { return !empty($value); });给我带来了一组数组,如下所示:[  [    {      "id": 16,      "patient_id": 7,      "medical_condition_id": null,      "patient": {        "id": 7,        "user_id": 7,        "pigment_id": 14,        "id_medical_history": "6219116421",        "user": {          "id": 7,          "name": "Austen Wiegand",        }      }    },    .....  ],  [    {      "id": 22,      "patient_id": 1,      "medical_condition_id": null,      "patient": {        "id": 7,        "user_id": 1,        "pigment_id": 14,        "id_medical_history": "6219116421",        "user": {          "id": 7,          "name": "Gregor Wiegand",        }      }    },    .......  ]]因为我需要返回一个元素数组,所以我组合了我得到的数组,如下所示:$result = [];    foreach ($patientClinicTests as $array) {        $result = array_merge($result, $array->toArray());    }    return $result;这将返回一个数组,如下所示:[    {      "id": 16,      "patient_id": 7,      "medical_condition_id": null,      "patient": {        "id": 7,        "user_id": 7,        "pigment_id": 14,        "id_medical_history": "6219116421",        "user": {          "id": 7,          "name": "Austen Wiegand",        }      }    },我想知道是否有更聪明的选择,可以使用 Eloquent 而不是 foreach 语句作为一个元素数组返回。
查看完整描述

3 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

您可以使用 all() 方法将您的集合转换为数组:

$patientClinicTests = $id->patients()
            ->with('PatientClinicTests', 'PatientClinicTests.Patient.User')
            ->get()
            ->pluck('PatientClinicTests')
            ->filter(function ($value) { return !empty($value); })->all();

请注意,如果你想迭代你的数组,你应该在过滤后重建数组索引......你可以使用'values'方法来做到这一点:

$patientClinicTests = $id->patients()
            ->with('PatientClinicTests', 'PatientClinicTests.Patient.User')
            ->get()
            ->pluck('PatientClinicTests')
            ->filter(function ($value) { return !empty($value); })->values()->all();
查看完整回答
反对 回复 2023-04-28
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

Flatten 方法帮助我在不使用 foreach 语句的情况下为单个数组提供 array_merge() 函数:

$patientClinicTests = $id->patients()
            ->with('PatientClinicTests', 'PatientClinicTests.Patient.User')
            ->get()
            ->pluck('PatientClinicTests')
            ->filter(function ($value) { return !empty($value); })->flatten()->all();

我将按照推荐的方式使用表连接进行测试


查看完整回答
反对 回复 2023-04-28
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

也许您可以在数组上使用 collect 方法将其对齐到单个数组中

$collection = collect($patientClinicTests);
$collections = $collection->values()->all();

也许这会奏效


查看完整回答
反对 回复 2023-04-28
  • 3 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信