Laravel中如何修改Offer模型的多对多关联以仅返回父分类
修改多对多关联以仅返回父分类
当然可以实现!你只需要在多对多关联的定义中添加查询约束,就能让这个关联只返回parent_category为NULL的父分类。下面给你两种可行的方案:
方案一:直接修改原关联方法
如果你确定之后不会再通过这个关联获取所有分类(包括子分类),可以直接在原方法里添加whereNull约束:
public function category() { return $this->belongsToMany(Category::class)->whereNull('parent_category'); }
这样每次调用$offer->category时,都会自动筛选出父分类。不过这种方式的缺点是会覆盖原关联的功能,后续如果需要获取所有关联分类就没法用这个方法了。
方案二:新增专门的关联方法(推荐)
为了保留原关联的灵活性,建议你新建一个专门用于获取父分类的关联方法,原关联方法继续保留用于获取所有关联分类:
// 保留原关联,用于获取所有关联的分类(包括子分类) public function categories() { return $this->belongsToMany(Category::class); } // 新增方法,仅返回parent_category为NULL的父分类 public function parentCategories() { return $this->belongsToMany(Category::class)->whereNull('parent_category'); }
这样你可以根据需求选择调用:
$offer->categories获取所有关联分类$offer->parentCategories仅获取父分类
另外需要注意:如果你的分类表中标识父级的字段逻辑不是parent_category为NULL(比如用parent_id=0表示顶级分类),只需要把whereNull改成对应的条件即可,比如where('parent_id', 0)。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

