У меня есть несколько родственных моделей. user
может принадлежать многим group
с, а group
с может иметь любое количество siteCensus
с. Я хочу выполнить запрос, но ограничить результаты только теми сайтами, которые ему разрешено просматривать. Чтобы сделать это, я должен знать, есть ли данный id
в списке user
s siteCensus
es. Модели и таблицы названы предсказуемо.
Я пытался установить такое отношение:
$user = User::first();
$user->hasManyThrough('App\SiteCensus', 'App\GroupSiteCensus', 'group_id','id',,'sites_census_id')
, но не повезло. Я попробовал еще одну вещь:
$user->load('groups.siteCensus')
, которая дает мне список всех siteCensus
es, но я не могу легко извлечь только поля 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");
}
}