laravel 使用模型关联实现无限极分类 多出来的数据怎么去掉
时间: 2024-03-21 17:40:30 浏览: 94
Treeview和dropdownlist无限极分类添加删除
3星 · 编辑精心推荐
在 Laravel 中,使用模型关联实现无限级分类时,可以使用 `whereHas` 方法限定查询结果的深度。例如,如果你想获取所有分类的第一级子分类,可以这样写:
```php
$categories = Category::where('parent_id', 0)
->with('children')
->get();
```
如果你想获取所有分类的前两级子分类,可以这样写:
```php
$categories = Category::where('parent_id', 0)
->with(['children' => function ($query) {
$query->where('parent_id', '>', 0);
}, 'children.children'])
->get();
```
在上面的代码中,我们使用了 `with` 方法来预加载分类的子分类,使用了匿名函数来限制子分类的深度。具体来说,我们在第一级子分类的查询中,使用了 `where` 方法来排除了所有 `parent_id` 为 0 的分类,这样就只剩下了第二级子分类。然后,在第二级子分类的查询中,我们又使用了 `with` 方法来预加载了第三级子分类。
如果你想获取所有分类的前三级子分类,可以继续套用上面的代码,使用匿名函数来限制第三级子分类的深度。以此类推。
如果你希望从查询结果中排除多出来的数据,可以使用 `unsetRelation` 方法来删除不需要的关联。例如,如果你只需要第一级子分类,可以这样写:
```php
$categories = Category::where('parent_id', 0)
->with('children')
->get()
->each(function ($category) {
$category->unsetRelation('children');
});
```
在上面的代码中,我们使用了 `each` 方法来遍历查询结果,然后使用 `unsetRelation` 方法来删除每个分类的子分类关联。这样,最终的查询结果中就只剩下了第一级子分类。
阅读全文