laravel - изменить значение в массиве для ресурсов API - PullRequest
0 голосов
/ 25 сентября 2018
{
"data": {
   "username": "candy",
   "certificates": [
   {
   "id": 11,
   "category_id": 1,
   "certname": "cert name test",
   "created_at": "2018-08-18 00:58:12",
   "updated_at": "2018-08-18 00:58:12"
   }
   ]
 }
}

Выше приведен ответ с использованием Eloquent: Ресурсы API.

Я хотел бы указать имя категории вместо category_id.

Ниже приведен класс ресурсов

    public function toArray($request)
{
    return [
        'nickname' => $this->nickname,
        'certificates' => $this->certificates,
    ];
}

сертификаты находятся в массиве (отношение hasMany)

сертификаты относятся к категории

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

В этом случае в классе ресурсов вы можете выбрать имя категории для каждого сертификата и прикрепить его.

public function toArray($request)
{

    $certificateList = $this->certificates;

    foreach($certificateList as $ceritificate) {

         // fetch only the category name from the database.
         // attach to the certificate.

         $categoryName = Category::where('id', $certificate->category_id)->pluck('name')->first();
         $certificate->setAttribute('category_name, $categoryName);
    }

    // then as usual
    return [
         'nick_name' => $this->nick_name,
         'certificates' => $certificateList
    ];
}
0 голосов
/ 29 января 2019

вы можете просто сделать это следующим образом

в контроллере

 return    CertificateResource::collection(Certificate::with('category')->get());

в CertificateResource

 return [
    'nickname' => $this->nickname,
    'certificates' => $this->certificates,
    'category_name'=>$this->whenLoaded('category', function () {
            return $this->category->category_name;
        }),
];
0 голосов
/ 25 сентября 2018

Это может помочь, запустить цикл foreach

$category = "Your SELECT Query";
foreach ($category as $value) {
               $categoryId = json_decode($value->category_id);
               $x = Category::select('certname')->whereIn('id', $categoryId)->get();
               foreach ($x as $as) {
                   $y[] = $as->certname;
               }
               $value->certname = $y;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...