laravel eloquent不使用受保护的表名

时间:2016-07-01 10:47:44

标签: laravel orm eloquent laravel-5.2

在我的模型中,我添加了受保护的$ 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_IDpivot_ROLE_IDApp\GroupRole GROUP_ID来自pivot_GROUP_IDgroups App\GroupRole groups GROUP_ID = App\GroupRoleGROUP_ID其中App\GroupRoleROLE_ID = 1)

我尝试用group_role替换App \ GroupRole并在mysql中执行。它工作正常。我错过了什么吗?

2 个答案:

答案 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');

希望这有效。