代码之家  ›  专栏  ›  技术社区  ›  jaycodez

如何从另一个模型返回集合?

  •  1
  • jaycodez  · 技术社区  · 5 年前

    目前,我只能返回订单表如数据。

    {
      "data": [
        {
          "id": 1,
          "external_id": 1,
          "refer_order_id": 1364116832365,
    ...
        },
    

    我还需要返回与该表相关的数据。在手工补锅匠这是这样做的…

    $order = App\Order::first();
    $order->carts;
    

    这将提供与订单表相关的推车。

    资源/订单.php

    <?php
    
    namespace App\Http\Resources;
    
    use Illuminate\Http\Resources\Json\ResourceCollection;
    
    class Order extends ResourceCollection
    {
        /**
         * Transform the resource collection into an array.
         *
         * @param  \Illuminate\Http\Request  $request
         * @return array
         */
        public function toArray($request)
        {
            return [
                'data' => $this->collection,
            ];
        }
    }
    

    api.php接口

            Route::get('/orders/bulkindex/', function () {
                return new OrderCollection(Order::all());
            });
    

    资源\购物车.php

    <?php
    
    namespace App\Http\Resources;
    
    use Illuminate\Http\Resources\Json\ResourceCollection;
    
    class Cart extends ResourceCollection
    {
        /**
         * Transform the resource into an array.
         *
         * @param  \Illuminate\Http\Request  $request
         * @return array
         */
        public function toArray($request)
        {
            return [
                'data' => $this->collection,
            ];
        }
    }
    
    

    我想像这样返回数据…与这些数据相关的手推车信息。

            return [
                'data' => $this->collection,
                'carts' => CartResource::collection($this->carts),
            ];
    

    这将返回此错误:

    此集合实例上不存在异常属性(CATS)。

    2 回复  |  直到 5 年前
        1
  •  2
  •   Salim Djerbouh SeliC    5 年前

    可以急切地加载模型关系,但在收集后无法访问它

    它必须与要收集的查询一起返回

    Route::get('/orders/bulkindex/', function () {
        return new OrderCollection(Order::with(['carts', 'another'])->get());
    });
    

    这将返回附加到数据的关系,不确定如何通过

    希望这有帮助

        2
  •  0
  •   Poldo    5 年前

    使用紧急加载:

    Order::with('carts')->get();
    

    有多个表

    Order::with(['table1', 'table2'])->get();