Php 未找到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 我正在尝试检查用户是否可以在他所在的页面上创建/读取

在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种模式:用户页面群组页面群组。因此,在模型中,我定义了如下关系:

用户型号:

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函数本身也应该是单数的,对吗?