Как обработать ресурсы Laravel внутри другого ресурса? - PullRequest
0 голосов
/ 15 мая 2019

У меня есть Ресурсы внутри ресурсов, обычно это будет работать нормально, но если Ресурс 1.1.1 внутри Ресурса 1.1 даст поле с определенным значением, мне нужно, чтобы он возвратил пустой массив в Ресурсе 1. Чтобы это не чтобы показать, что конкретный Ресурс 1.1 внутри коллекции Ресурс 1

Попробовал использовать json_decode, и он заставил Resource обработать и выдает строку результата Resource и json_decode, чтобы вернуть его обратно в массив.

// Ресурс 1.1 ->

    return [
        'id' => (int)$this->id,
        'block' => BlockResource::collection($this->blocks)->data($this->parameters);
    ];

// (1.1.1) BlockResource

 return [
        'id' => (int)$this->id,
        'groups' => Resource::collection()
    ];

дд ($ BlockResource); // показывает объект ресурса, а не обработанный результат

$ BlockResource = json_encode ($ BlockResource);

дд ($ BlockResource); // строка с обработанным и может сделать json_decode для возврата в виде массива ....

Пример:

resource1: [
                {
                    id : 1
                    block:{
                      id : 1
                      groups : [1,2,3,4,5]
                    }
                },
                {
                    id : 2
                    block:{
                      id : 2
                      groups : []
                    }
                }
]

2º resource1.1 не должен отображаться, так как groups это пустой массив Я могу использовать трюк json_encode / decode, но это даст мне лишнюю обработку.

Есть идеи: D?

1 Ответ

0 голосов
/ 16 мая 2019

Хорошо решили перейти к методам JsonResource и

/**
 * Resolve the resource to an array.
 *
 * @param  \Illuminate\Http\Request|null  $request
 * @return array
 */
public function resolve($request = null)

у меня работает

...