微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以在 API 响应中返回不同的模型

如何解决是否可以在 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 举报,一经查实,本站将立刻删除。