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

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

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

  1. $data = ProcessoSeletivoRDSincroniza::all();
  2. //$data = $data->toArray();
  3. $api = new RDStationApi();
  4. foreach($data as $row)
  5. {
  6. $events = array(
  7. "event_type" => "CONVERSION",
  8. "event_family" => "CDP",
  9. "payload" => [
  10. "conversion_identifier" => "Name of the conversion event",
  11. "name" => $row->nome_completo,
  12. "email" => $row->email,
  13. "personal_phone" => $row->telefone,
  14. "cf_ps_curso" => $row->ps_curso,
  15. "cf_ps_ano_semestre" => $row->ps_anosemestre,
  16. "cf_ps_data_vestibular_agendado" => $row->ps_data_vestibular_agendado,
  17. "cf_ps_nota_enem" => (string) $row->ps_nota_enem,
  18. "cf_forma_ingresso" => $row->ps_forma_ingresso,
  19. "cf_ps_unidade" => $row->ps_unidade,
  20. "cf_ps_situacao" => $row->ps_situacao
  21. ]
  22. );
  23. $return = $api->update_contact($events);
tuwxkamq

tuwxkamq1#

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

  1. php artisan make:resource ProcessoSeletivoRDSincronizaResource

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

  1. <?php
  2. namespace App\Http\Resources;
  3. use Illuminate\Http\Resources\Json\JsonResource;
  4. class ProcessoSeletivoRDSincronizaResource extends JsonResource
  5. {
  6. /**
  7. * Transform the resource into an array.
  8. *
  9. * @param \Illuminate\Http\Request $request
  10. * @return array
  11. */
  12. public function toArray($request)
  13. {
  14. return [
  15. 'id' => $this->id,
  16. //ADD ALL THE FIELDS, methods also work normally: $this->myMethod()
  17. 'created_at' => $this->created_at,
  18. 'updated_at' => $this->updated_at,
  19. ];
  20. }
  21. }

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

  1. //for the whole collection
  2. $events = ProcessoSeletivoRDSincronizaResource::collection(ProcessoSeletivoRDSincroniza::all());
  3. //or for single use
  4. $event = new ProcessoSeletivoRDSincronizaResource($single_model)
展开查看全部

相关问题