Laravel 定义模型关系时如何在表间非关系表上添加条件

Laravel 定义模型关系时如何在表间非关系表上添加条件,laravel,eloquent,php-7,laravel-5.7,Laravel,Eloquent,Php 7,Laravel 5.7,我有一个名为company\u teamit relationship tocompany和user的关系表,在company\u team表中有一个is\u ceo字段来标记公司团队成员是否是ceo。下面是我的模型定义 class CompanyTeam extends Pivot { /** * return all company team member with out ceo * @return \Illuminate\Database\Eloquent\R

我有一个名为
company\u team
it relationship to
company
user
的关系表,在
company\u team
表中有一个
is\u ceo
字段来标记公司团队成员是否是ceo。下面是我的模型定义

class CompanyTeam extends Pivot
{
    /**
     * return all company team member with out ceo
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function team_member()
    {
        return $this->belongsTo(User::class, 'user_id');
    }

    /**
     * return only ceo's info
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function company_ceo()
    {
        $this->where('is_ceo', 1); // it dosen't work, but it is effect l want
        return $this->belongsTo(User::class, 'user_id');
    }
}

我用
addGlobalScope
搜索了一个答案,但它不适合我,因为当我同时使用
team\u member
company\u ceo
关系时,它会在两者上都添加条件,然后定义关系时就不能添加条件了。 执行查询时必须添加条件

CompanyTeam::with(['company\u ceo'=>函数($q)use(){
$q->where('is_ceo',1);
}])
->get()


我希望这有帮助。祝你有一个美好的一天和快乐的编码…:)

在用户模型中,您可以定义范围

public function scopeCompanyCeo($query){
return $query->where('is_ceo',1);
}
然后您可以在控制器中使用like

$user = User::find(1)->companyCeo()->get();

它不起作用,因为
is_ceo
是在
compnay_team
表上定义的,您的方法将添加
where user.is_ceo=1
这样的条件,并抛出一个db error
列user.is_ceo不存在
更改为$q->where('company_team.is_ceo',1)我已经尝试过了,本地范围如何?
$user = User::find(1)->companyCeo()->get();