Создать вложенный API - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь создать API, у которого есть списки, и внутри каждого списка есть список пыльников внутри него, называемый карточками, а список карточек - это карточки этого списка.

Я пытался показать его вФункция индекса и не работает, это было так:

  public function index()
  { 
   // $list = List -> cards();
    $list = List::cards();

    return response( $list );
  }

Модель карты:

  public function list()
   {
        return $this->belongsTo( List::class() );
   }

Модель карты:

  public function cards()
   {
        return $this->hasMany( Card::class() );
   }

Что я хочу вывестиэто данные JSON, как это:

  "lists":[
           'name':listname

             'cards':[
                       'card one': card name,
                     ]
           ]

Ответы [ 3 ]

1 голос
/ 20 июня 2019

Если вы используете Laravel Framework, используйте Resource для ответа, в Resource of laravel вы можете загружать карты. Например, в ListController:

public function index()
{
    return ListResource::collection(List::all()->paginate());
}

А в ListResource:

public function toArray($request)
{
    'cards' => CardResource::collection('cards');
}
0 голосов
/ 20 июня 2019

Вы можете использовать ресурсы .

Http \ Resources \ List:

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class List extends JsonResource
{
    public function toArray($request)
    {
        $cards = [];
        foreach ($this->cards as $card) {
            $cards[] = $card->name;
        }

        return [
            'name' => $this->name,
            'cards' => $cards,
        ];
    }
}

Http \ Controllers \ ListController:

namespacce App\Http\Controllers;

use App\Http\Resources\List as ListResource;
use App\Components\List;

class ListController extends Controller
{
    $lists = List::query()->get();

    return ListResource::collection($lists)->response();
}
0 голосов
/ 20 июня 2019

belongsTo или hasMany принимает имя модели в качестве первого аргумента.В вашем случае вам нужно передать имя класса модели в ваших методах отношений.

public function list()
{
    return $this->belongsTo(List::class);
}

и

public function cards()
{
    return $this->hasMany(Card::class);
}

Поэтому, если вы хотите получать модели, включающие отношения, вы можете использовать withметод.

return response(List::query()->with('cards'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...