连接表并查看 laravel 8 中每个类别名称中的类别计数

Posted

技术标签:

【中文标题】连接表并查看 laravel 8 中每个类别名称中的类别计数【英文标题】:join tables and see the count of categories in each category name in laravel 8 【发布时间】:2022-01-13 01:17:30 【问题描述】:

对不起,我想问一下。 如果我的语言不整洁,请提前道歉

我有一个类别表 带颜色 -id (pk) -姓名 - 和其他人

我有一个 post 表 带颜色 -id (pk) -category_id(fk)

及其他

我想计算每个类别的帖子数量以及 laravel 8 中的类别名称。 这是我的 jquery 但仍然错误

$categ = DB::table('posts')
 ->select('category_id', 'categories.id', DB::raw('count(posts.id) as total_product'))
 ->join('categories', 'posts.category_id', '=', 'categories.id')
 ->groupBy('posts.category_id')
 ->get();

有人想帮我吗?

【问题讨论】:

【参考方案1】:

如果你愿意使用 Eloquent,答案会很简单。

帖子将是帖子表的模型

类别将是类别表的模型

将存在一对一或任何其他关系 模型之间的要求

假设 CategoryPost 模型之间存在一对多的关系 这可以通过在您的 Category 模型中添加一个函数来实现

public function posts()

    return $this->hasMany(Post::class);

那么你可以使用类似...

Category::withCount('posts')->get()

【讨论】:

非常感谢先生,它成功了,但我还有一个问题,所以我上面的问题真的无法完成,先生?因为我设法在 sql 工作台上进行了查询 可以做到,即使你的代码看起来也很好,可能是一些拼写错误。 Query Builder 几乎比 eloquent 快 0.5%。但是 eloquent 带有一些安全概念,例如批量分配保护、数据库注入以及隐藏或强制转换的不同属性。如果不使用 eloquent,你并没有真正从 Laravel 中受益。【参考方案2】:

我假设您在查询中使用了错误的表名,或者可能在问题中输入了错误的表名。

假设您的帖子表名称是 posts,类别表是 categories,那么您的查询应该是:

$categ = DB::table('posts')
 ->select('categories.id', "categories.name", DB::raw("count(posts.id) as total_product"))
 ->join('categories, "posts.category_id', '=', 'categories.id')
 ->groupBy('posts.category_id')
 ->get();

请注意 - 确保用您的表格替换表格名称。

如果您使用它进行一次加载,那么您也可以使用模型关系来获取完整信息,而无需创建自定义查询。

https://laravel.com/docs/8.x/eloquent-relationships

您可以有类别来发布关系。 假设您有模型类别和帖子,那么您可以在类别模型中具有以下关系。

public function posts()
 return $this->hasMany(Post::class, 'category_id', 'id');
 

然后在您的代码中,您可以使用$category->posts 获取该类别的帖子集合,并可以使用$category->posts->count() 获取该类别的帖子数。

【讨论】:

以上是关于连接表并查看 laravel 8 中每个类别名称中的类别计数的主要内容,如果未能解决你的问题,请参考以下文章

laravel 4中的一对多关系帮助

如何为帖子创建类别标签?我正在使用 laravel 8

PHP Laravel:无法建立连接,因为目标机器主动拒绝它

左连接 3 个表并在空单元格上显示真假

PHP Laravel:无法建立连接,因为目标计算机主动拒绝它

Laravel-8 一对多/多一关系