我有一个 Service_Categories 表,该表的结构是:
类别标题 | parent_id | 状态 | |
---|---|---|---|
1 | 第一类 | 空 | 未激活 |
2 | 第一个子类别 | 1 | 活动 |
3 | 第一个子子类别 | 2 | 活动 |
我有一个服务表:
服务名称 | category_id | |
---|---|---|
1 | 第一次服务 | 3 |
2 | 二次服务 | 1 |
模型
public function getAllServices() {
$services = Service::with(['serviceCategory','serviceCategory.parents'])
->where('status',true)
->whereHas('serviceCategory',function($q) {
return $q->where('status',true)
->whereHas('serviceCategory.parents',
function($parentQuery) {
return $parentQuery->where('status, true);
})
})
}
}
我在这里想说的是,如果顶级类别处于非活动状态,则不应在类别的父类别处于非活动状态的集合中显示服务。
答案 0 :(得分:0)
尝试将您的第二个 whereHas
移到根,因为那里的关系与服务相关,而不是其中的关系......
public function getAllServices()
{
$services = Service::with(['serviceCategory', 'serviceCategory.parents'])
->where('status', true)
->whereHas('serviceCategory', function ($q) {
return $q->where('status', true);
})
->whereHas('serviceCategory.parents', function ($parentQuery) {
return $parentQuery->where('status', true);
});
}
答案 1 :(得分:0)
您的状态列不是布尔类型,但为什么要检查 *** status=true
*** 而不是 status="active"
?
您不能使用布尔值来查找字符串。