通过laravel集合创建单个数组,但带有特定字段

mitkmikd  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(314)

我有一个我打电话给你的模型 $data = ProcessoSeletivoRDSincroniza::all(); 这个模型为我提供了一个拥有300多条记录的集合,包括姓名、手机、电子邮件等属性。。
我必须通过一个数组将这个集合传递给一个api主体请求,这个数组有特定的键字段,我考虑的唯一方法是用foreach循环迭代这个集合,并用这个集合字段创建/设置这个数组,工作正常,但我的应用程序对每个记录执行一个请求,这不是一个好的处理方法。
所以我在想,是否有一种方法可以创建一个包含所有记录的“自定义”单个数组,所以我不需要逐条记录进行迭代和请求,只需将所有这些记录转换成json文件并发送。
这是我现在的代码:

$data = ProcessoSeletivoRDSincroniza::all();
        //$data = $data->toArray();

        $api = new RDStationApi();
        foreach($data as $row)
        {
            $events = array(
                "event_type" => "CONVERSION",
                "event_family" => "CDP",
                "payload" => [
                    "conversion_identifier" => "Name of the conversion event",
                    "name" => $row->nome_completo,
                    "email" => $row->email,
                    "personal_phone" => $row->telefone,
                    "cf_ps_curso" => $row->ps_curso,
                    "cf_ps_ano_semestre" => $row->ps_anosemestre,
                    "cf_ps_data_vestibular_agendado" => $row->ps_data_vestibular_agendado,
                    "cf_ps_nota_enem" => (string) $row->ps_nota_enem,
                    "cf_forma_ingresso" => $row->ps_forma_ingresso, 
                    "cf_ps_unidade" => $row->ps_unidade, 
                    "cf_ps_situacao" => $row->ps_situacao
                ]
                );
                $return = $api->update_contact($events);
tuwxkamq

tuwxkamq1#

您可以使用名为 API-Resources .
https://laravel.com/docs/8.x/eloquent-resources
创建一个新的 Resource 对于您的型号:

php artisan make:resource ProcessoSeletivoRDSincronizaResource

之后,这将在名为的资源文件夹中创建一个文件; ProcessoSeletivoRDSincronizaResource ,在此文件中,您需要调整 toArray() 方法。

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class ProcessoSeletivoRDSincronizaResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            //ADD ALL THE FIELDS, methods also work normally: $this->myMethod()
            'created_at' => $this->created_at,
            'updated_at' => $this->updated_at,
        ];
    }
}

之后,您可以像这样使用资源:

//for the whole collection
 $events = ProcessoSeletivoRDSincronizaResource::collection(ProcessoSeletivoRDSincroniza::all());
//or for single use
 $event = new ProcessoSeletivoRDSincronizaResource($single_model)

相关问题