WhereHas 有条件

问题描述

我在表格中有这种关系。

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'))
                ;
            })
        ;

它按预期工作,但是当我转到数据库并手动将 tierssite_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 (将#修改为@)