Php 未找到Laravel模型关系类
在Laravel中,我刚开始使用模型,我有以下数据库结构:Php 未找到Laravel模型关系类,php,mysql,laravel,laravel-4,model,Php,Mysql,Laravel,Laravel 4,Model,在Laravel中,我刚开始使用模型,我有以下数据库结构: 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 我正在尝试检查用户是否可以在他所在的页面上创建/读取
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种模式:用户、页面、群组页面和群组。因此,在模型中,我定义了如下关系:
用户型号:
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');
}
return $this->belongsTo('class', 'local_key', 'parent_key');
return $this->hasMany('class', 'foreign_key', 'local_key');
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');
}
}
集团模式:
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');
}
return $this->belongsTo('class', 'local_key', 'parent_key');
return $this->hasMany('class', 'foreign_key', 'local_key');
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');
}
}
我在我的控制器中使用的是:
$group_id = User::find(Session::get('user_id'));
$crud = Group::find($group_id->group)->group_pages()->first();
class User {
public function group()
{
return $this->belongsTo('Group');
}
}
如中所述
但这给了我一个错误:
找不到类组页面
这里出了什么问题
我不确定如何在关系中分配键
我知道这一点:
一对一逆:
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');
}
return $this->belongsTo('class', 'local_key', 'parent_key');
return $this->hasMany('class', 'foreign_key', 'local_key');
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');
}
}
一对多:
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');
}
return $this->belongsTo('class', 'local_key', 'parent_key');
return $this->hasMany('class', 'foreign_key', 'local_key');
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');
}
}
我不知道一对多的逆运算。我知道它是:return$this->belongsTo('table')代码>,但我不知道钥匙的事
分组页面型号:
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');
}
return $this->belongsTo('class', 'local_key', 'parent_key');
return $this->hasMany('class', 'foreign_key', 'local_key');
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');
}
}
您定义了与不存在的模型类的关系
要解决此问题,请创建一个组页面模型(甚至更好的组页面),并更改组模型中的对应关系(return$this->hasMany('GroupPage','group\u id','id')
然后修复用户
-模型中的关系:
public function group() // typo! not groep..
{
return $this->belongsTo('group', 'group'); // remove id, you do not need it
}
然后,您的控制器代码出现了一个问题,可能可以这样解决:
$group_id = User::find(Session::get('user_id'))->group()->id;
$crud = Group::find($group_id)->group_pages()->first();
我总是喜欢向新加入Laravel的人推荐Laracasts(我希望你还不知道)。基本的屏幕广播都是免费的,你很快就会看到的!具体来说,看一看这一集
我还强烈建议遵守惯例
使用users
-表中的列名group\u id
作为组外键)李>
类名应该是PascalCase->Group
,而不是Group
,当将它们作为参数提交时,请坚持使用它(belongsTo('Group')
)
这让生活变得容易多了
最后
请注意,对于您试图实现的目标,可能会有一些包。我想到的一个问题是委托。你用这个代码让你的生活很艰难,因此你无法让它工作
请先查看以下内容:
// This is User model, NOT group_id
$group_id = User::find(Session::get('user_id'));
下一步:
因此,以下是您需要的:
// User model
public function group()
{
return $this->belongsTo('Group', 'group_id'); // rename column to group_id
}
// Group model
public function pages()
{
return $this->belongsToMany('Page', 'group_pages')
->withPivot(['create', 'read', 'update', 'delete']);
}
然后:
模型文件应以单数命名,并以驼峰形式命名,即用户
,页面
,组
。不需要表示用户和组之间连接的模型
然后,在定义关系时,第一个参数是模型的类名:
class User {
public function group()
{
return $this->belongsTo('Group', 'local_key', 'parent_key');
}
}
你违背了拉拉维尔的传统,让自己的生活变得困难
如果按照Laravel的约定命名列,那么也不需要在关系定义中指定它们。因此,您的users
表应该有一个名为group\u id
的列,它是一个外键,引用groups
表中的id
列。你的关系可以这样表达:
$group_id = User::find(Session::get('user_id'));
$crud = Group::find($group_id->group)->group_pages()->first();
class User {
public function group()
{
return $this->belongsTo('Group');
}
}
更加简洁易读,而且您不必记住本地和外国列名的方向
您可以在官方文档中阅读更多关于Laravel用于模型和关系名称的约定:这是因为您定义了与不存在的模型的关系。创建一个GroupPage
-模型(或者更好的GroupPage
),并更改相应的关系(return$this->hasMany('GroupPage','groupid','id'));
在您的团队中-model@nozzleman在我创建了这个页面之后,我真的做到了。等一下,让我在问题中展示一下。好吧,我猜这是怎么回事。让我回答。现在我得到:未定义的属性:illumb\Database\elogent\Relations\BelongsTo::$id
在使用该代码之后。Groep是一个打字错误。是的。我编辑了它。我从来没有知道与列同名的关系使其无法使用。现在我得到一个错误:调用成员函数pages()在非对象上
@Loko如果你有组
列,那么你就不能使用动态属性$user->group
来引用关系,默认的方法是什么?不管怎样-错误是说,你没有与$user
相关的组
,仅此而已。users中的组列是一个外来的k组表中id的ey。因此,我现在可以忘记额外的参数了?只要列名为group\u id
,而不仅仅是group
,是的。好的,我做了所有这些,但它并没有真正回答我的主要问题。谢谢您提供的信息,如果您按照Laravel的期望命名,您的类将被找到。Th函数本身也应该是单数的,对吗?