Объяснение
Пользователь сканирует штрих-код и системные ответы с помощью штрихкодируемой модели (может быть "Статья", "Упаковка" или "Полка инвентаризации").
return new BarcodeResource($barcode);
Ресурс штрих-кода разрешает ресурс штрихкодирования на основе класса штрихкодирования.Каждая штрих-кодовая модель возвращает разные JSON-ресурсы.
// BarcodeResource.php
$modelResource = app()->makeWith(__NAMESPACE__ . '\\' . class_basename($this->barcodable) . 'Resource', [
'resource' => $this->barcodable
]);
return [
'code' => $this->code,
'model_type' => class_basename($this->barcodable),
'model_data' => $modelResource
];
В случае ...
- ... Статья, я хотел бы напечатать пакеты, содержащие такие статьи
- ... Пакет, я хотел бы напечатать местоположение (полка инвентаря), включенные статьи и дочерние пакеты
- ... Инвентарная полка, я хотел бы напечатать все пакеты
Проблема
Я хочу предотвратить бесконечные циклы с рекурсивными ресурсами.
Article
>> Package
>> Article (infinity loop begins because package resource
returns articles in spesific package)
Package
>> Article
>> Package (loop...)
>> Inventory Shelf
>> Package (loop...)
>> Child package
Inventory Shelf
>> Package
>> Article
>> Inventory Shelf (loop...)
>> Child package
Одной из проблем должно быть стремление к загрузке и сбросу отношений, нокак я могу сбросить те в правильной фазе?Это возможно даже с одним ресурсом или я должен сделать несколько ресурсов (рекурсивный / обычный)?
Tries
Дополнительный атрибут, содержащий отношения
Я пробовал это решение,но волшебным образом $this->relations
атрибут меняется на целое число 1 после пары рекурсий ...
class PackageResource extends JsonResource
{
private $relations;
public function __construct($resource, array $relations = [])
{
parent::__construct($resource);
$this->relations = $relations;
}
public function toArray($request)
{
return [
'id' => $this->id,
'articles' => $this->when(in_array('articles', $this->relations), ArticleResource::collection($this->articles, $this->relations)),
'children' => PackageResource::collection($this->children, $this->relations),
];
}