Создал две модели 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. В чем может быть проблема?