如何在* belongsToMany *表连接上的Laravel 5.4中创建范围?

时间:2017-05-08 13:00:47

标签: php laravel scope eloquent laravel-5.4

表格结构如下:

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

有没有人实现过这种范围呢?

谢谢!

0 个答案:

没有答案