скрыть атрибуты в ресурсе Laravel API

Я хочу скрыть атрибут в ресурсе Collection API, я не хочу делать это всегда, поэтому мне нужно что-то вроде makeHidden() делать это когда захочу.

Но возврат ресурсов API Illuminate\Support\Collection экземпляр, который не makeHidden() метод, класс коллекции Eloquent Illuminate\Database\Eloquent\Collection

Как мне это сделать?

1 ответ

Решение

Если вы хотите настроить ответ для определенного случая, вы можете создать второй класс ресурсов, который будет содержать только желаемые атрибуты:

class FirstResource extends JsonResource {

    public function toArray($request)
    {
        return [
            'first_value' => $this->first_value,
            'second_value' => $this->second_value,
            'third_value' => $this->third_value,
            'fourth_value' => $this->fourth_value,
        ];
    }
}
class SecondResource extends JsonResource {

    public function toArray($request)
    {
        return [
            'first_value' => $this->first_value,
            'second_value' => $this->second_value,
        ];
    }
}

Затем используйте их, когда вам понадобится один из них:

public function aControllerMethod()
{
    $model = MyModel::find($id);

    return new FirstResource($model);
}
public function anotherControllerMethod()
{
    $model = MyModel::find($id);

    return new SecondResource($model);
}

Теперь у вас будет два разных ответа от одной модели (или коллекции).

Другие вопросы по тегам