如何解决是否可以在 API 响应中返回不同的模型
disposingNetworkImage(image: NetworkImage('https://example.com/my-image'))
目前,我有一个雄辩的关系,产品有很多交易。是否可以执行以下操作返回单级深度数组:
- 如果产品有有效交易,则只返回交易;
- 否则,退回产品本身。
这是我之前在我的 Product.PHP 中实现的:
Route::get('/search','SearchController@index');
Deal.PHP
public function deals()
{
return $this->hasMany(Deal::class,'product_id');
}
搜索控制器:
public function product()
{
return $this->hasOne(Product::class,'id','product_id');
}
在我的 ProductResource 中:
public function index(Request $request)
{
$per_page = $request->per_page ?? 10;
$products = Product::query()->latest()
->when($request->query('filter'),function ($query) use ($request) {
$query->with('deals')->where('title','LIKE',"%$request->filter%");
})
->when($request->query('category'),function ($query) use ($request) {
$query->with('deals')->whereHas('categories',function ($q) use ($request) {
$q->where('title',"%$request->category%");
});
})
->paginate($per_page);
return new PaginatedCollection($products,ProductResource::class);
}
现在,我已经将 ProductResource 重构为这个,但它都返回 <?PHP
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class ProductResource extends JsonResource
{
public function toArray($request)
{
$details = array_filter($this->details ?: [],function ($d) {
return $d != "";
});
$personalizedOptions = array_filter($this->personalized_options ?: [],function ($o) {
return $o != "";
});
return [
'id' => $this->id,'createdAt' => $this->created_at,'updatedAt' => $this->updated_at,'title' => $this->title,'sellerId' => $this->sellerId,'description' => $this->description,'categories' => CategoryResource::collection($this->categories),'details' => $details,'active' => (bool) $this->active,'defaultPreviewImageId' => $this->default_preview_image_id,'originalPrice' => $this->originalPrice,'shippingPrice' => $this->shippingPrice,'shippingWeightLbs' => $this->shippingWeightLbs,'shippingWeightOz' => $this->shippingWeightOz,'shippingMaxDays' => $this->shipping_max_days,'shippingMinDays' => $this->shipping_min_days,'personalized' => (bool) $this->personalized,'personalizedOptions' => $personalizedOptions,'deals' => $this->deals ?? null,'options' => ProductOptionResource::collection($this->productOptions),'images' => ImageResource::collection($this->images->whereNull('Meta')),'preview' => new ImageResource($this->images->where('Meta','=','preview')->first()),];
}
}
响应
null
解决方法
由于条件检查,它可能给出空结果的原因。它返回一个数组,您需要将其更新为此。
if(count($this->deals))
这将检查交易数组是否包含数组中的元素。如果没有,它将退回产品。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。