为了账号安全,请及时绑定邮箱和手机立即绑定

如何访问laravel中的相关表

如何访问laravel中的相关表

PHP
犯罪嫌疑人X 2022-12-23 13:22:55
我有一些相关的模型。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");    }}
查看完整描述

2 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

如果我理解正确的话..你想要 $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”正确


查看完整回答
反对 回复 2022-12-23
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

事实证明,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);

                        });

                });

        });


查看完整回答
反对 回复 2022-12-23
  • 2 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信