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

我正在尝试以下操作:


我正在使用以下函数获取与我的患者相关的所有 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 语句作为一个元素数组返回。



海绵宝宝撒
浏览 124回答 3
3回答

小怪兽爱吃肉

您可以使用 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();

元芳怎么了

Flatten 方法帮助我在不使用 foreach 语句的情况下为单个数组提供 array_merge() 函数:$patientClinicTests = $id->patients()             ->with('PatientClinicTests', 'PatientClinicTests.Patient.User')             ->get()             ->pluck('PatientClinicTests')             ->filter(function ($value) { return !empty($value); })->flatten()->all();我将按照推荐的方式使用表连接进行测试

回首忆惘然

也许您可以在数组上使用 collect 方法将其对齐到单个数组中$collection = collect($patientClinicTests); $collections = $collection->values()->all();也许这会奏效
打开App,查看更多内容
随时随地看视频慕课网APP