如何访问laravel中的相关表

我有一些相关的模型。Auser可以属于许多groups,groups 可以有任意数量的siteCensuses。我想运行一个查询,但将结果限制为仅允许他查看的那些 siteCensus。为此,我必须知道给定id的是否在 auser的siteCensuses 列表中。模型和表格的命名是可预测的。


我试图设置这样的关系:


$user = User::first();

$user->hasManyThrough('App\SiteCensus', 'App\GroupSiteCensus', 'group_id','id',,'sites_census_id')

但没有运气。我尝试的另一件事是:


$user->load('groups.siteCensus')


这确实让我得到了所有siteCensuses 的列表,但我不能轻易地只提取id字段来检查成员资格。


最终,我需要像这样将它插入到模型中:


Class Patient extends Model

{

    protected static function boot()

    {

        parent::boot();

        static::addGlobalScope('status', function (Builder $builder) {

                $site_census_ids = .......

                $builder->where(function (Builder $q) use ($site_census_ids) {

                    return $q->whereIn('sites_census_id', $site_census_ids);

                });    

        });

    }

}

一些相关代码如下:


class Group extends Model

{

    public function users()

    {

        return $this->belongsToMany("App\User");

    }


    public function siteCensus()

    {

        return $this->belongsToMany("App\SiteCensus", 'group_site_census', 'group_id', 'sites_census_id');

    }


}

class User extends Model

{

    public function groups()

    {

        return $this->belongsToMany('App\Group');

    }

}

class SiteCensus extends Model

{

    public function groups()

    {

        return $this->belongsToMany("App\Group");

    }

}


犯罪嫌疑人X
浏览 110回答 2
2回答

宝慕林4294392

如果我理解正确的话..你想要 $site_census_ids 用户已经足够简单了:$site_census_ids=$myUser->groups()->join('group_site_census','group_site_census.group_id','=','groups.id')->join('sites_census','sites_census.id','group_site_census.sites_census_id')->select('sites_census.id')->get()->pluck('id');请确保表名“sites_census”、“groups”正确

慕尼黑5688855

事实证明,laravel 实际上确实有一种简单的方法可以做到这一点。您可以whereHas()直接使用链接表。就我而言,这就是我所需要的。        static::addGlobalScope('status', function (Builder $builder) {                $builder->where(function (Builder $q) {                    return $q->whereHas('siteCensus.groups.users', function ($q) {                            $q->where('user_id', Auth::user()->id);                        });                });        });
打开App,查看更多内容
随时随地看视频慕课网APP