gpt4 book ai didi

php - 找不到 Laravel 模型关系类

转载 作者:可可西里 更新时间:2023-11-01 07:58:39 25 4
gpt4 key购买 nike

在 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 个模型:UsersPagesGroup_pagesGroups。所以在模型中,我这样定义关系:

用户模型:

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');
}

我在我的 Controller 中使用它是这样的:

$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'); 

我不知道一对多逆。我知道它是:return $this->belongsTo('table');,但我不知道 key 。

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');
}

}

最佳答案

模型文件应以单数形式命名并采用驼峰式命名,即UserPageGroup。表示用户和组之间连接的模型不是必需的。

然后在定义关系时,第一个参数是模型的类名:

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

关于php - 找不到 Laravel 模型关系类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29117969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com