在我的模型中,我添加了受保护的$ table,但是当我要使用它时,laravel不会使用它。这是我的榜样:
class Role extends Model
{
protected $table = 'role';
protected $primaryKey = 'ROLE_ID';
protected $casts = [
'ACTIVE' => 'boolean',
];
protected $fillable = [
'ROLE', 'ACTIVE', 'TYPE'
];
public $timestamps = false;
public function groups()
{
return $this->belongsToMany(Group::class, GroupRole::class, 'ROLE_ID', 'GROUP_ID');
}
}
这是群组模型:
class Group extends Model
{
protected $table = 'groups';
protected $primaryKey = 'GROUP_ID';
protected $fillable = [
'GROUP_ID', 'GROUP_NAME', 'PARENT_GROUP', 'ACTIVE'
];
protected $casts = [
'ACTIVE' => 'boolean',
];
public $timestamps = false;
public function type()
{
return $this->belongsTo(GroupType::class, 'TYPE', 'TYPE_ID');
}
public function roles()
{
return $this->belongsToMany(Role::class, GroupRole::class, 'GROUP_ID', 'ROLE_ID');
}
}
这是group_role表模型。它处理角色和组之间的多对多关系:
class GroupRole extends Model
{
protected $table = 'group_role';
protected $primaryKey = 'GROUP_ROLE_ID';
protected $fillable = [
'COMMENT', 'ROLE_ID', 'GROUP_ID'
];
public $timestamps = false;
}
当我想使用这个模型时问题就开始了。例如:
$role = App\Role::first();
$groups = $role->groups;
Laravel返回此错误消息:
SQLSTATE [42S02]:未找到基表或视图:1146表'favian_mydb.App \ GroupRole'不存在(SQL:选择
groups
。*,App\GroupRole
。{{1} }ROLE_ID
,pivot_ROLE_ID
。App\GroupRole
GROUP_ID
来自pivot_GROUP_ID
内groups
App\GroupRole
groups
GROUP_ID
=App\GroupRole
。GROUP_ID
其中App\GroupRole
。ROLE_ID
= 1)
我尝试用group_role替换App \ GroupRole并在mysql中执行。它工作正常。我错过了什么吗?
答案 0 :(得分:1)
问题出在您的roles
关系中:
public function roles()
{
return $this->belongsToMany(Role::class, GroupRole::class,'GROUP_ID','ROLE_ID');
}
belongsToMany
期望中间表名称为第二个参数,而不是类名称。
所以你必须这样定义:
public function roles()
{
return $this->belongsToMany(Role::class, 'group_role','GROUP_ID','ROLE_ID');
}
答案 1 :(得分:0)
我认为问题在于你的关系功能。尝试使用字符串而不是Model :: class。
示例:
return $this->return $this->belongsTo('App\GroupType', 'TYPE', 'TYPE_ID');
希望这有效。