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 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\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();