php - 如何访问laravel中的相关表
问题描述
我有一些相关的模型。Auser
可以属于许多group
s,并且group
s 可以有任意数量的siteCensus
es。我想运行一个查询,但将结果限制为仅允许他查看的那些 siteCensus。为了做到这一点,我必须知道给定是否在 a的id
列表中。模型和表的命名是可预测的。user
siteCensus
我试图设置这样的关系:
$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");
}
}
解决方案
如果我理解正确的话..你想要用户足够简单的 $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”正确
推荐阅读
- c++-cli - 测试以检测 C++/CLI 中的模板类型是托管还是非托管
- python - 我如何从 dict 值和元组列表中获取每个元素并从中生成一个元组
- python - 为什么这个查找无序列表的最小值和最大值的函数在某些情况下不起作用?
- version-control - VCS 窗口中缺少“忽略”选项
- angular-material-stepper - 如何在单击“下一步”时拨打电话并决定是否继续使用 CDKStepper?
- python - 在列中搜索 str 并创建新的项目列表
- ruby-on-rails - 如何根据数据库中的记录创建具有最少位数的 url 链接缩短 slug
- python-3.x - 从列表中删除一定百分比的元素,同时保留列表的结构完整性
- ant - ant如何检查驱动器D是否存在
- python - 在熊猫中编写文件比较