Laravel 5 中相关产品数量的产品类别列表

Posted

技术标签:

【中文标题】Laravel 5 中相关产品数量的产品类别列表【英文标题】:List of categories of products with the respective quantity of products associated in Laravel 5 【发布时间】:2019-11-24 05:17:16 【问题描述】:

我想在 laravel 5 中有一个产品类别列表,其中包含与它们相关联的产品数量(类别),如下所示:

电子产品 (20) 件,手机 (100) 件

预期的 JSON 格式:


"name": "electronic",
"quantity": "20"
,

"name": "cell phones",
"quantity": "100"
,

有人知道如何在 laravel 5 中实现这一点吗?

编辑 现在我的控制器是这样的:

    private $categories;

public function __construct(Categories $categories) 
    $this->categories = $categories;


public function index()

    $categories = $this->categories
    ->withCount('products')
    ->get();

    $data = ['data' => $categories];
    return response()->json($data);

在 mu 模型中我有:

public function products()

    return $this->hasMany('App\Models\Products')
    ->selectRaw('category_id, count(*) as total')
    ->groupBy('category_id');


public function categories()

    return $this->hasOne('App\Models\Categories');

它现在返回这些错误:

"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'products.categories_id' in 'where clause' (SQL: select `categories`.*, (select count(*) from `products` where `categories`.`id` = `products`.`categories_id`) as `products_count` from `categories`)"

在我的数据库image of the column

laravel 以复数形式调用我的列,当我将数据库中的列名更改为 categories_id 时它工作正常,但我不知道该怎么做

【问题讨论】:

请提供一些代码。你在哪一方面卡住了? 我已经编辑了添加代码的帖子 我已经通过在模型中指定外键category_id解决了我的问题,谢谢您的评论 【参考方案1】:

我通过在模型中指定外键category_id解决了这个问题,Categories模型中的最终代码是:

public function products()

    return $this->hasMany('App\Models\Products', 'category_id')
    ->selectRaw('category_id, count(*) as total')
    ->groupBy('category_id');

而且效果很好

来自 POSTMAN 的 JSON 响应是:

        "id": 18,
        "category_name": "electronics",
        "description": null,
        "icon": "tv",
        "created_at": null,
        "updated_at": null,
        "products_count": 20
    

如果遇到同样的问题,请参阅that link too

【讨论】:

以上是关于Laravel 5 中相关产品数量的产品类别列表的主要内容,如果未能解决你的问题,请参考以下文章

如何填充与laravel中的产品表链接的类别表

Laravel 按相关表排序

在laravel中的两个相关模型中过滤

如何通过多对多关系获取与同一张表相关的行 - Laravel

根据对多关系中相关对象的计数对获取请求进行排序

根据 WooCommerce 购物车中的商品数量和产品类别禁用支付网关