You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在API的Product模型show方法响应中返回similarProductsBasedOnBrand结果

解决方案:将相似品牌产品加入API响应

步骤1:修正相似产品方法(可选但建议)

你的similarProductsBasedOnBrand方法命名指向品牌逻辑,但内部使用了Category::find($brand_id),这大概率是笔误。如果你的品牌数据存在Brand模型中,建议修正方法逻辑,避免业务混淆:

public function similarProductsBasedOnBrand($brand_id)
{
    // 若确实是基于Category查询则保留原代码,否则替换为Brand模型
    return Brand::find($brand_id)->products()->get();
}

步骤2:将相似产品加入API响应

在show方法中,先通过当前产品获取品牌ID,调用相似产品方法后,用ProductResource::collection()将集合转为统一的API资源格式,最后添加到additional响应数组中:

修改后的show方法代码:

public function show(Product $product): ProductResource
{
    // 获取当前产品的品牌ID(假设Product模型有brand_id字段)
    $brandId = $product->brand_id;
    // 获取相似品牌产品并转为资源集合
    $similarProducts = ProductResource::collection(
        $product->similarProductsBasedOnBrand($brandId)
    );

    return (new ProductResource($product))->additional([
        'gallery' => $product->photos->pluck('image')
            ->transform(fn ($v) => Storage::disk('public')->url($v)),
        'similar_products' => $similarProducts
    ]);
}

额外优化:排除当前产品

如果希望相似产品列表不包含当前产品,可以在similarProductsBasedOnBrand方法中添加过滤条件:

public function similarProductsBasedOnBrand($brand_id)
{
    return Brand::find($brand_id)->products()
        ->where('id', '!=', $this->id) // 排除当前产品
        ->get();
}

内容的提问来源于stack exchange,提问作者Pouya Vaghefi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:01:17