Как вернуть коллекцию из другой модели? - PullRequest
1 голос
/ 17 октября 2019

В настоящее время я могу вернуть данные только для таблицы заказов, например.

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

Мне нужно также вернуть данные, относящиеся к этой таблице. В Artisan Tinker это делается следующим образом ...

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

Это даст тележки, связанные с таблицей заказов.

Resource / Order.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());
        });

Resources \ Cart.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),
        ];

Это вернет эту ошибку:

Исключительное свойство [тележки] не существует в этом экземпляре коллекции.

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Вы можете загрузить модель отношений, но не можете получить к ней доступ после того, как она была собрана

Она должна быть возвращена с запросом для сбора

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

Это вернетотношения, добавленные к данным, не уверены, как можно сериализовать их независимо,

Надеюсь, это поможет

0 голосов
/ 17 октября 2019

Использовать нагрузку:

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

С несколькими столами

Order::with(['table1', 'table2'])->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...