Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP Laravel REST api双反向关系_Php_Laravel - Fatal编程技术网

PHP Laravel REST api双反向关系

PHP Laravel REST api双反向关系,php,laravel,Php,Laravel,我正在使用Laravel构建一个RESTAPI。我的数据库有一个名为container的表。容器与另一个名为Shop的表有外部关系。最后是一个图像表,它具有指向Shop表的外键。 我想为我的容器创建一个端点,该端点将返回容器数据,包括分配给它的店铺的数据以及分配给店铺的所有图像 这是我的容器资源: class Container extends JsonResource { public function toArray($request) { return

我正在使用Laravel构建一个RESTAPI。我的数据库有一个名为container的表。容器与另一个名为Shop的表有外部关系。最后是一个图像表,它具有指向Shop表的外键。 我想为我的容器创建一个端点,该端点将返回容器数据,包括分配给它的店铺的数据以及分配给店铺的所有图像

这是我的容器资源:

class Container extends JsonResource
{

    public function toArray($request)
    {

        return [
            'id' => $this->id,
            'shop_id' => $this->shop_id,
            'shop' => (new ShopResource($this->whenLoaded('shop')))
        ];
    }
}
这是我的店铺资源:

class Shop extends JsonResource
{

    public function toArray($request)
    {
        return parent::toArray($request);
    }
}
这是我的容器控制器:

class ContainerController extends Controller
{
    public function index()
    {
        return ContainerResource::collection(Container::with('shop')->get());
    }
}
在Django中,基本上我需要做的就是将相关的名称分配给图像模型(例如related_name=“images”),然后使用例如shop.objects.first()。图像获取数据库中与商店模型相关的所有图像,这些图像将在容器序列化程序中考虑。
如何使用Laravel Rest API实现相同的效果

要加载关系,请执行以下操作

Container::with('shop.images');
就我所知,
parent::toArray()
应该包括
商店资源
中的图像,如果没有,请填写与
容器资源
类似的资源

class Shop extends JsonResource
{

    public function toArray($request)
    {
        return [
            ...
            'images' => ImageResource::collection($this->whenLoaded('images')),
        ];
    }
}
要加载多个关系,使用with方法,还可以获取一个数组

Container::with(['shop.images', 'shop.employees',]);

谢谢你帮了我,不过我想到一件事。如果有另一个表具有外键到商店模型,例如员工,我们希望将他们也包括在容器中,该怎么办。容器::with('shop.images')::with('shop.employees')?