我有一个简单的数据库设置:用户、组、页面——每一个都是多对多的。见图表:http: //i.imgur.com/oFVsniH.png
现在我有一个可变的用户 id ($id),我想用这个来取回用户可以访问的页面列表,很明显,因为它在所有表上都是多对多的。
我已经像这样设置了我的主要模型:
class User extends Eloquent {
protected $table = 'ssms_users';
public function groups()
{
return $this->belongsToMany('Group', 'ssms_groups_users', 'user_id','group_id');
}
}
class Group extends Eloquent {
protected $table = 'ssms_groups';
public function users()
{
return $this->belongsToMany('User', 'ssms_groups_users', 'user_id','group_id');
}
public function pages()
{
return $this->belongsToMany('Page', 'ssms_groups_pages', 'group_id','page_id');
}
}
class Page extends Eloquent {
protected $table = 'ssms_pages';
public function groups()
{
return $this->belongsToMany('Group', 'ssms_groups_pages', 'group_id','page_id');
}
}
我可以通过简单地获取用户所属的组:
User::with('groups')->first(); // just the first user for now
但是,我完全不知道如何通过一个查询来获取用户(明显地)可以访问的页面?
我相信 SQL 会是这样的:
select DISTINCT GP.page_id
from GroupUser GU
join GroupPage GP on GU.group_id = GP.group_id
where GU.user_id = $id
任何人都可以帮忙吗?
谢谢