【发布时间】:2013-06-22 09:54:06
【问题描述】:
我有一个简单的数据库设置:用户、组、页面——每一个都是多对多的。 见图: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
谁能帮忙?
谢谢
【问题讨论】: