[英]how to access related table in laravel
我有一些相關的模型。 一個user
可以屬於多個group
並且group
可以有任意數量的siteCensus
。 我想運行一個查詢,但將結果限制為僅允許他查看的那些 siteCensus。 為了做到這一點,我必須知道給定的id
是否在user
的siteCensus
的列表中。 模型和表的命名是可預測的。
我試圖設置這樣的關系:
$user = User::first();
$user->hasManyThrough('App\SiteCensus', 'App\GroupSiteCensus', 'group_id','id',,'sites_census_id')
但沒有運氣。 我嘗試的另一件事是:
$user->load('groups.siteCensus')
這確實為我提供了所有siteCensus
的列表,但我不能輕松地僅提取id
字段來檢查成員資格。
最終,我需要像這樣將它插入 model 中:
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");
}
}
如果我理解正確的話..你想要用戶足夠簡單的 $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”正確
事實證明,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);
});
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.