laravel - Laravel:如何从多级类别中获取产品
问题描述
我正在查看我的代码,我意识到我使用的是数组。
这就是我从多级类别中获取产品的方式:
public function childs()
{
return $this->hasMany(self::class, 'parent_id')->whereColumn('id', '!=', 'parent_id');
}
public function descendants()
{
$descendants = [];
foreach ($this->childs as $category)
{
array_push($descendants, $category);
$descendants = array_merge($descendants, $category->descendants());
}
return $descendants;
}
public function treeProducts()
{
$categories = [$this];
$categories = array_merge($categories, $this->descendants());
$ids = [];
forEach($categories as $category)
{
array_push($ids, $category->id);
}
return Product::whereIn('category_id', $ids);
}
调用 treeProducts 将从每个子树中获取产品。但问题是我将类别和产品存储在数组中,使用 500 多种我认为会淹没 RAM 的产品。
如果不使用数组,我不能使用 Query Builder 执行此过程吗?
解决方案
推荐阅读
- javascript - snapshotChanges() 多次流式传输
- mapbox - 无法选择 Mapbox ID 图层
- android - 插入新行时,Android Room FOREIGN KEY 约束失败(代码 787)
- c# - 这是 WPF 的 SaveFileDialog.FileName 中真正需要的行为吗?
- reactjs - 将元素推送到存储在会话存储中的现有数组
- python - 生成正态分布样本
- logstash - Logstash 日期解析不同
- python - 在 vscode 中调试 pytest unitest 导致 AttributError sys has no attribute __breakpointhook__ on exit
- python - 对复数列表进行排序并获取排序索引
- macos - Qt中Ctrl+Click和Right Click的区别