2016-07-01 5 views
1

В моей модели я добавил защищенную $ table, но когда я собираюсь использовать ее, laravel не использует ее. Это моя роль модели:laravel eloquent не использует имя защищенной таблицы

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_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)

Я попытался заменить App \ GroupRole на group_role и выполнить в mysql. Он работает нормально. Я что-то упускаю?

ответ

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

Я думаю, что проблема в вас связана с функциями. Попробуйте использовать строки вместо класса Model ::.

Пример:

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

Надеется, что это работает.

+0

Нет, это не работает. –

Смежные вопросы