users
id | username | password | group | //(group is the id of the group)
groups
id | groupname |
group_pages
group_id | page_id | create | read | update | delete
pages
id | pagename
我试图检查用户是否可以在他所在的页面上创建/读取/更新/删除.
所以我现在有4个模型:Users,Pages,Group_pages和Groups.所以在模型中,我定义了这样的关系:
用户模型:
public function group()
{
return $this->belongsTo('group', 'group', 'id');
}
团体模型:
public function users()
{
return $this->hasMany('users', 'group', 'id');
}
public function group_pages()
{
return $this->hasMany('group_pages', 'group_id', 'id');
}
我在我的控制器中使用这个:
$group_id = User::find(Session::get('user_id'));
$crud = Group::find($group_id->group)->group_pages()->first();
但这给了我错误:
Class group_pages not found
这里出了什么问题?
我不确定在关系中分配键.
我知道这个:
一对一反转:
return $this->belongsTo('class', 'local_key', 'parent_key');
一对多:
return $this->hasMany('class', 'foreign_key', 'local_key');
我不知道一对多逆.我知道它是:返回$this-> belongsTo(‘table’);,但我不知道密钥.
Group_pages模型:
class Group_pages extends Eloquent {
public function pages()
{
return $this->belongsTo('pages', 'id', 'group_id');
}
public function group()
{
return $this->belongsTo('group', 'id', 'group_id');
}
}
解决方法:
模型文件应以单数形式命名,并以驼峰形式命名,即用户,页面,组.表示用户和组之间的连接的模型不是必需的.
然后,在定义关系时,第一个参数是模型的类名:
class User {
public function group()
{
return $this->belongsTo('Group', 'local_key', 'parent_key');
}
}
你违背了Laravel的惯例,让自己的生活变得困难.
如果按照Laravel的约定命名列,则无需在关系定义中指定它们.因此,您的users表应该有一个名为group_id的列,该列是引用groups表中id列的外键.然后你的关系可以这样表达:
class User {
public function group()
{
return $this->belongsTo('Group');
}
}
更简洁,更易于阅读,您不必记住本地和外部列名称的方式.
您可以在官方文档中阅读有关Laravel用于模型和关系名称的约定的更多信息:http://laravel.com/docs/master/eloquent#relationships