我正在尝试制作一个具有列表的api,并且每个列表中都有一个称为cards的花药列表,cards列表就是该列表的卡。
我试图在索引函数中显示它,但是却不起作用,就像这样:
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,
]
]
答案 0 :(得分:1)
如果使用Laravel框架,请使用Resource进行响应,您可以在laravel的Resource中加载卡。例如在ListController中:
public function index()
{
return ListResource::collection(List::all()->paginate());
}
在ListResource中:
public function toArray($request)
{
'cards' => CardResource::collection('cards');
}
答案 1 :(得分:0)
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'));
答案 2 :(得分:0)
您可以使用resources。
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();
}