Почему не работает attach() метод у модели?

Создал две модели Roles и Permissions. Есть набор пермиссий и набор ролей, и связанная таблица roles_permissions. У одной роли может быть много пермиссий, и у одной пермиссии может быть много ролей.

Указываю в модели Role:
Role.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Role extends Model
{
    use HasFactory;

    /**
     * Indicates if the model should be timestamped.
     *
     * @var bool
     */
    public $timestamps = false;

    public function permissions()
    {
        return $this->belongsToMany(Permission::class,'roles_permissions');
    }
}



Модель Permission:
Permission.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Permission extends Model
{
    use HasFactory;

    /**
     * Indicates if the model should be timestamped.
     *
     * @var bool
     */
    public $timestamps = false;

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



Таблицы данных:
roles

+----+---------------+-------+
| id | name          | slug  |
+----+---------------+-------+
| 1  | Администратор | admin |
+----+---------------+-------+
| 2  | Пользователь  | user  |
+----+---------------+-------+


permissions

+----+------------+------------+
| id | name       | slug       |
+----+------------+------------+
| 1  | Edit users | edit_users |
+----+------------+------------+
| 2  | Edit posts | edit_posts |
+----+------------+------------+


roles_permissions

+---------+---------------+
| role_id | permission_id |
+---------+---------------+
| 1       | 1             |
+---------+---------------+
| 2       | 2             |
+---------+---------------+



Создаю сидер, в нем указываю:
Role::create([
        "name" => "Администратор",
        "slug" => "admin"
      ]);
и
$permission = Permission::create([
        "name" => "Редактировать пользователей",
        "slug" => "edit-users"
      ]);

      Role::where('slug','admin')->first()->attach($permission);


Запускаю сид и получаю ошибку: Call to undefined method App\Models\Role::attach(), насколько я понял, такая проблема возникает, если не задана связь многие-ко-многим, но у меня везде стоит belongsTo. В чем может быть проблема?
  • Вопрос задан
  • 151 просмотр
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
Role::where('slug','admin')->first()->permissions()->attach($permission);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы