表格结构如下:
person
id - integer
name - string
company
id - integer
name - string
person_company
person_id - integer
company_id - integer
以下是模型:
class Person extends Model
{
public function companies()
{
return $this->belongsToMany('App\Company', 'person_company');
}
}
class Company extends Model
{
public function persons()
{
return $this->belongsToMany('App\Person', 'person_company');
}
}
这意味着,一个人可以成为多个公司的一部分,每个公司可以有很多人;
在标准Laravel
用户表格中,我们有:
users
id - integer
name - string
company_id - integer
每个用户都对公司感兴趣。
[问题1]
如何创建范围以仅引入属于特定公司的人员?
我尝试使用 GlobalScope :
class CompanyScope implements Scope
{
public function apply(Builder $builder, Model $model)
{
$model->companies()->where('company_id', 1);
}
}
class CompanyScope implements Scope
{
public function apply(Builder $builder, Model $model)
{
$query->companies()->where('company_id', 1);
}
}
但无法通过......我也尝试了 LocalScopes :
public function scopeCo($query, $company_id)
{
return $query->companies()->where('company_id', $company_id);
}
没有成功......
[问题2]
要指出的另一件事是从上面的本地范围示例代码向范围发送变量的选项,其中接收company_id
(来自用户的 controller
,使用Auth::user()->company_id;
。$ company_id)。
我希望在控制器上使用的是我的本地范围将返回与用户公司相关联的人员,截至:
Person::Co(Auth::user()->company_id)->get();
有没有人实现过这种范围呢?
谢谢!