在 Laravel API 资源中隐藏属性

hide attributes in Laravel API Resource

我想在集合中隐藏一个属性 API 资源 我不想总是这样做,所以我需要像 makeHidden() 这样的东西来在我想的时候做。

但是 API 资源 return Illuminate\Support\Collection 没有 makeHidden() 方法的实例 Eloquent 集合 Class 是 Illuminate\Database\Eloquent\Collection

我该怎么做?

如果您想针对某些情况自定义响应,您可以创建第二个资源 class,它只包含您需要的属性:

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);
}

现在您将得到来自同一模型(或集合)的两个不同响应。