почему laravel 6 отношение многие ко многим не работает? - PullRequest
2 голосов
/ 02 марта 2020

Привет! Я просто хочу получить разрешения для роли. Я пытаюсь выполнить следующие действия:

$r = Role::find(1);
dd($r->permissions);

Приведенный выше сценарий не возвращает никаких разрешений, однако вы можете видеть, что в приведенных ниже таблицах есть данные. Я также попробовал следующее, но не повезло

$role = Role::with('permissions')->where('id', 1)->first();

У меня есть данные в таблице, как вы можете видеть

Таблица: tes_permissions

enter image description here

Таблица: tes_roles

enter image description here

Таблица : tes_permission_role

enter image description here

И следующие модели

class Permission extends Model
{

    protected $table = 'tes_permissions'

    public function roles()
    {
        return $this->belongsToMany('App\Role');
    }
}

И

class Role extends Model
{

    protected $table = 'tes_roles';

    public function permissions() {
        return $this->belongsToMany('App\Permission', 'tes_permission_role', 'permission_id', 'role_id');
    }
}

Может быть, кто-то любезно подскажет мне, в чем может быть проблема, я был бы признателен.

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Измените его.

Модель разрешения

public function roles()
{
    return $this->belongsToMany('App\Role', 'tes_permission_role', 'permission_id', 'role_id');
}

Ролевая модель

public function permissions() {
    return $this->belongsToMany('App\Permission', 'tes_permission_role', 'role_id', 'permission_id');
}
0 голосов
/ 02 марта 2020

Вы смешали порядок свойств в belongsToMany(). Третий аргумент указывает идентификатор для модели, определяющей отношения. Поэтому перейдите к следующему:

public function permissions() {
    return $this->belongsToMany('App\Permission', 'tes_permission_role', 'role_id', 'permission_id');
}

И на модели Permission также определите его, чтобы быть уверенным.

public function roles()
{
    return $this->belongsToMany('App\Role', 'tes_permission_role', 'permission_id', 'role_id');
}
...