скрыть атрибуты в ресурсе 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);
}
Теперь у вас будет два разных ответа от одной модели (или коллекции).