连接表并查看 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,答案会很简单。
帖子将是帖子表的模型
类别将是类别表的模型
将存在一对一或任何其他关系 模型之间的要求
假设 Category 和 Post 模型之间存在一对多的关系 这可以通过在您的 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 中每个类别名称中的类别计数的主要内容,如果未能解决你的问题,请参考以下文章
PHP Laravel:无法建立连接,因为目标机器主动拒绝它