微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – Laravel模型关系未找到类

在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

我试图检查用户是否可以在他所在的页面上创建/读取/更新/删除.

所以我现在有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();

the documentation所述.

但这给了我错误

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐