Php 创建嵌套API

Php 创建嵌套API,php,json,laravel,Php,Json,Laravel,我试图制作一个有列表的api,在每个列表中都有另一个列表,叫做卡片,卡片列表就是这个列表中的卡片 我试图在索引函数中显示它,但没有成功,它是这样的: public function index() { // $list = List -> cards(); $list = List::cards(); return response( $list ); } "lists":[ 'name':listname

我试图制作一个有列表的api,在每个列表中都有另一个列表,叫做卡片,卡片列表就是这个列表中的卡片

我试图在索引函数中显示它,但没有成功,它是这样的:

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

    return response( $list );
  }
  "lists":[
           'name':listname

             'cards':[
                       'card one': card name,
                     ]
           ]
卡片型号:

  public function list()
   {
        return $this->belongsTo( List::class() );
   }
  public function cards()
   {
        return $this->hasMany( Card::class() );
   }
卡片型号:

  public function list()
   {
        return $this->belongsTo( List::class() );
   }
  public function cards()
   {
        return $this->hasMany( Card::class() );
   }
我想要输出的是json数据,如下所示:

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

    return response( $list );
  }
  "lists":[
           'name':listname

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

belongsTo
hasMany
接受模型名称作为第一个参数。在本例中,需要在关系方法中传递模型类名

公共功能列表()
{
返回$this->belongsTo(列表::类);
}

公共功能卡()
{
返回$this->hasMany(卡片::类);
}
所以,如果您想要接收包含关系的模型,您可以使用
方法

返回响应(List::query()->with('cards');
您可以使用

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();
}

如果您使用Laravel框架使用资源进行响应,则可以在Laravel的资源中加载卡。例如,在ListController中:

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

public function toArray($request)
{
    'cards' => CardResource::collection('cards');
}

什么是
dd($this->cards)
ListResource
show?仅显示4张卡数据有8张卡这是怎么发生的?