0

我的问题是,我真的不需要加载 api 资源。查看我的 Api 资源文件

//BoxItemResource.php

 public function toArray($request)
{
    return [
        'box_id'=> $this->box_id,
        'item_id'=> $this->item_id,
        'item'=> new ItemResource($this->item)
    ];
}

//ItemResource.php

public function toArray($request)
{
    return [
        'id' => $this->id,
        'shipping_price' => $this->shipping_price,
        'condition_id' => $this->condition_id,
        'condition' => new ConditionResource($this->condition)
    ];
}

//条件资源.php

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

//控制器

return BoxItemResource::collection(
        BoxItem::with([
            'item'
        ])->paginate(1)
    );

我的问题是,我只需要 BoxItem 和 Item 这里。我真的不想加载条件。如果我从 ItemResource.php 中删除条件关系,它将起作用。但问题是我在需要此条件的其他地方使用 ItemResource.php。

是否可以在这里否认装载条件关系船。

更清楚地说,我想加载我在 controller(in ->with()) 中提到的关系。

提前致谢。

4

2 回答 2

2

也许您正在寻找条件关系

理想情况下,它应该如下所示:

public function toArray($request)
{
    return [
        'box_id'=> $this->box_id,
        'item' => ItemResource::collection($this->whenLoaded('item'))
    ];
}

仅当关系已加载时,item密钥才会出现。

于 2019-01-30T08:02:01.110 回答
2

API 资源允许条件属性条件关系

对于我认为足以在您的情况下使用的属性,这意味着您可以简单地将属性值包装起来,$this->when($condition, $value)并且整个属性将从结果中删除 if $condition == false。所以你的代码的一个具体例子:

return [
    'box_id'=> $this->box_id,
    'item_id'=> $this->item_id,
    'item'=> $this->when($this->relationLoaded('item'), new ItemResource($this->item))
];

或者,如果您更喜欢使用关系风格:

return [
    'box_id'=> $this->box_id,
    'item_id'=> $this->item_id,
    'item'=> new ItemResource($this->whenLoaded('item'))
];
于 2019-01-30T08:03:26.007 回答