我的模型中有Factory
which hasMany
Category
which hasMany
Product
。例如,它Category
看起来像这样:
class Category extends Model
{
use HasFactory;
public function products(){
return $this->hasMany(Product::class);
}
// ...
}
我正在尝试列出类别,并且想将产品数量添加到此列表中的每个类别中。
我目前正在做的是
$factories = Factory::all();
$factories->load('translation');
$factories->load('categories');
$factories->load('categories.translation');
$factories->load('categories.products');
现在有问题的部分是我不想加载完整的产品列表,只想加载产品数量。我发现有这种loadCount
方法,它应该可以满足我的需要,尽管我不确定如何使用它。
当我这样做$factories->loadCount('categories.products')
时,我收到一条错误消息:“调用未定义的方法 App\Models\Factory::categories.products”。更不用说我不确定如何通过访问产品来获取计数,而无需延迟加载整个内容。有人可以解释一下这应该如何工作吗?
首先,您应该使用预先加载,即使在这种情况下它不会对性能产生太大影响,但我们可以使用
withCount()
方法这将返回与您的代码示例相同的结果,但不加载产品,并在每个类别上添加
product_count
其产品数量的属性。如果你有一个范围或其他东西来过滤产品,你可以这样做
使用 load 预先加载