簡體   English   中英

如何訪問 laravel 中的相關表

[英]how to access related table in laravel

我有一些相關的模型。 一個user可以屬於多個group並且group可以有任意數量的siteCensus 我想運行一個查詢,但將結果限制為僅允許他查看的那些 siteCensus。 為了做到這一點,我必須知道給定的id是否在usersiteCensus的列表中。 模型和表的命名是可預測的。

我試圖設置這樣的關系:

$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM