Я пытаюсь преобразовать данный ответ 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.