Ресурс Laravel, игнорирующий данные поля - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь преобразовать данный ответ API во что-то, с чем легко работать.

Это то, что я имею до сих пор:

Контроллер:

public function drive()
{
    $optParams = [
        'corpora' => 'drive',
        'driveId' => env('GOOGLE_DRIVE_ID'),
        'includeItemsFromAllDrives' => true,
        'supportsAllDrives' => true,
        'fields' => 'files(*)'
    ];

    $results = $this->googleDrive->files->listFiles($optParams);
    $data = collect($results);
    $collection = new FileCollection($data);
    dd($collection);

    return 'Hi!';
}

Ресурс FileCollection:

public function toArray($request)
{
    return [
        'data' => $this->collection,
        'meta' => ['files_count' => $this->collection->count()],
    ];
}

Файловый ресурс:

public function toArray($request)
{
    return [
        'name' => $this->resource['name'],
        'mime' => $this->resource['mimeType'],
        'parents' => $this->resource['parents'],
        'version' => $this->resource['version'],
        'webDownloadLink' => $this->resource['webContentLink'],
        'webLink' => $this->resource['webViewLink'],
        'modified_at' => $this->resource['modifiedTime'],
        'size' => $this->resource['size']
    ];
}

Вот результат, который я получаю:

FileCollection {#223 ▼
  +collects: null
  +collection: Collection {#243 ▶}
  +resource: Collection {#243 ▼
    #items: array:2 [▼
      0 => File {#224 ▼
        +resource: Google_Service_Drive_DriveFile {#279 ▶}
        +with: []
        +additional: []
      }
      1 => File {#263 ▼
        +resource: Google_Service_Drive_DriveFile {#269 ▶}
        +with: []
        +additional: []
      }
    ]
  }
  +with: []
  +additional: []
}

Итак, как вы можете видеть, типы ресурсов являются правильными, но по какой-то причине 'meta' в FileCollection не существует, как и поля в Файл ресурс. Все поля по-прежнему отображаются, например, 30+ (вместо 8, запрошенных в FileResource).

Я что-то здесь упускаю?


EDIT:

При доступе к коллекции с помощью метода toArray () ($collection->toArray(null)) я действительно получаю соответствующий результат:

array:2 [▼
  "data" => Collection {#243 ▼
    #items: array:2 [▼
      0 => File {#224 ▶}
      1 => File {#263 ▶}
    ]
  }
  "meta" => array:1 [▼
    "files_count" => 2
  ]
]

Итак, как мне теперь убедиться, что эта коллекция использует toArray () FileResources? (Я все еще получаю более 30 полей вместо 8).

PS: Я не совсем понимаю, почему мне нужно вызывать toArray (), нигде в их документации не написано: https://laravel.com/docs/5.8/eloquent-resources.

...