gpt4 book ai didi

php - 从 laravel Eloquent 数据透视表中获取计数

转载 作者:可可西里 更新时间:2023-11-01 13:02:23 26 4
gpt4 key购买 nike

我有订单和产品的多对多关系。

<?php
class Order extends Eloquent {

public function user()
{
return $this->belongsTo('User');
}

public function products()
{
return $this->belongsToMany('Product');
}
}
?>


<?php
class Product extends Eloquent {

public function orders()
{
return $this->belongsToMany('Order');
}

}
?>

需要获取每个产品的订购次数。在mysql中,可以使用以下查询来实现此任务

SELECT products.id, products.description, count( products.id )
FROM products
INNER JOIN order_product ON products.id = order_product.product_id
INNER JOIN orders ON orders.id = order_product.order_id
GROUP BY product_id
LIMIT 0 , 30

上述查询结果如下:-

id  description   count(products.id)    
1 Shoes 3
2 Bag 2
3 Sun glasses 2
4 Shirt 2

如何使用 laravel eloquent(不使用查询构建器)完成此任务????如何使用 laravel eloquent 获取每个产品的订购次数?

最佳答案

对于 future 的查看者,从 Laravel 5.2 开始,有计算关系的 native 功能,无需加载它们,无需涉及您的资源模型或访问器 -

在已批准答案的示例上下文中,您将在 Controller 中放置:

$products = Product::withCount('orders')->get();

现在,当您在 View 中遍历 $products 时,每个检索到的产品都有一个 orders_count(或者,一般来说,只是一个 {resource}_count)列记录,您可以像显示任何其他列值一样简单地显示它:

@foreach($products as $product)
{{ $product->orders_count }}
@endforeach

对于相同的结果,此方法比批准的方法少生成 2 个数据库查询,并且唯一涉及的模型是确保您的关系设置正确。如果此时您使用的是 L5.2+,我会改用此解决方案。

关于php - 从 laravel Eloquent 数据透视表中获取计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25973095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com