问题描述
我在表格中有这种关系。
consumers;id,name,site_id,tier_id
tiers:id,site_id
categories: id,site_id
consumer_categories: consumer_id,category_id
consumer_tiers: category_id,tier_id
这就是我在模型中设置它的方式。
Consumer.PHP
public function tier(){
return $this->belongsTo(Tier::class,'tier_id');
}
public function categories(){
return $this->belongsToMany(Category::class,'consumer_categories','consumer_id','category_id');
}
层.PHP
public function consumers(){
return $this->hasMany(Consumer::class,'tier_id');
}
public function categories()
{
return $this->belongsToMany(Category::class,'category_tier','tier_id','category_id');
}
和 Category.PHP
public function consumers(){
return $this->belongsToMany(Consumer::class,'category_id','consumer_id');
}
现在,当我使用 site_id = 2
$site = Site::find(2);
$consumerQuery = $site->consumers()
->whereHas('categories.tiers')
->where(function($query) {
$query->whereNull('tier_status_until')
->orWhere('tier_status_until','<',date('Y-m-d 00:00:00'))
;
})
;
它按预期工作,但是当我转到数据库并手动将 tiers
的 site_id
之一更改为其他内容时,消费者仍然显示为好像此查询未验证 {{1 }}在site_id = 2
如果我写这样的东西
whereHas
它完美运行并且不会返回具有与 $consumerQuery = $site->consumers()
->join('tiers AS t','t.id','consumers.tier_id')
->where('t.site_id','=',$site->id)
->where(function($query) {
$query->whereNull('tier_status_until')
->orWhere('tier_status_until',date('Y-m-d 00:00:00'))
;
})
;
无关的层的消费者
有人可以帮我修复 site_id = 2
吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)