Laravel API 资源中的多级关系
Laravel Multi level relationship in API Resource
我的问题是,我确实不需要 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)
];
}
//ConditionResource.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。
这里是否可以否定loading condition关系ship
更清楚地说,我想加载我在控制器中提到的关系(in ->with())。
提前致谢。
也许您正在寻找 Conditional Relationships?
理想情况下,它应该如下所示:
public function toArray($request)
{
return [
'box_id'=> $this->box_id,
'item' => ItemResource::collection($this->whenLoaded('item'))
];
}
item
键只有在加载关系后才会出现。
API 资源允许 conditional attribtues and conditional relationships.
对于我认为在您的情况下足以使用的属性,这意味着您可以简单地将属性值包装在 $this->when($condition, $value)
中,如果 $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'))
];
我的问题是,我确实不需要 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)
];
}
//ConditionResource.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。
这里是否可以否定loading condition关系ship
更清楚地说,我想加载我在控制器中提到的关系(in ->with())。
提前致谢。
也许您正在寻找 Conditional Relationships?
理想情况下,它应该如下所示:
public function toArray($request)
{
return [
'box_id'=> $this->box_id,
'item' => ItemResource::collection($this->whenLoaded('item'))
];
}
item
键只有在加载关系后才会出现。
API 资源允许 conditional attribtues and conditional relationships.
对于我认为在您的情况下足以使用的属性,这意味着您可以简单地将属性值包装在 $this->when($condition, $value)
中,如果 $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'))
];