【问题标题】:laravel eloquent doesn't use protected table namelaravel eloquent 不使用受保护的表名
【发布时间】:2016-11-03 18:01:50
【问题描述】:

在我的模型中,我添加了受保护的 $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.ROLE_IDpivot_ROLE_IDApp\GroupRole.GROUP_ID as pivot_GROUP_ID from groups inner join App\GroupRole on groups.GROUP_ID = App\GroupRole.GROUP_ID 其中groups.@1) >

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

【问题讨论】:

    标签: laravel orm eloquent laravel-5.2


    【解决方案1】:

    问题在于您的roles 关系:

    public function roles()
    {
        return $this->belongsToMany(Role::class, GroupRole::class,'GROUP_ID','ROLE_ID');
    }
    

    belongsToMany 需要中间 table 名称作为第二个参数,而不是 class 名称。

    所以你必须像这样定义它:

    public function roles()
    {
        return $this->belongsToMany(Role::class, 'group_role','GROUP_ID','ROLE_ID');
    }
    

    【讨论】:

      【解决方案2】:

      我认为问题在于你的关系函数。尝试使用字符串而不是 Model::class。

      例子:

      return $this->return $this->belongsTo('App\GroupType', 'TYPE', 'TYPE_ID');

      希望这行得通。

      【讨论】:

        猜你喜欢
        • 2021-05-02
        • 2022-11-16
        • 2015-06-24
        • 2016-08-27
        • 1970-01-01
        • 2014-12-02
        • 2016-03-02
        • 2018-03-11
        • 1970-01-01
        相关资源
        最近更新 更多