Laravel Аксессуары и Мутаторы на сводной таблице - PullRequest
0 голосов
/ 16 января 2020

У меня есть отношение многие ко многим в моих моделях, и я хочу использовать Accessors & Mutators в моей сводной таблице, но, похоже, не работает

Модель пользователя

public function roles()
{
    return $this->belongsToMany(Role::class,UserRole::class)
        ->withPivot('faculty_id', 'status');
}

UserRole Модель

public function getRoleIdAttribute($role) {
    if($role == 1) {
        return "admin";
    } else if($role == 2){
        return "teacher";
    } else if($role == 3){
        return "student";
    }
    return null;
}

public function setRoleIdAttribute($role)
{
    if($role == 'admin') {
        $this->attributes['role_id'] = 1;
    } else if($role == 'teacher') {
        $this->attributes['role_id'] = 2;
    } else if($role == 'student') {
        $this->attributes['role_id'] = 3;
    }
}

и в моем контроллере я использую, например,

$user =  User::create([
        'first_name' => $request->first_name,
        'middle_name' => $request->middle_name,
        'last_name' => $request->last_name,
        'email' => $request->email,
        'password' => Hash::make($request->password)
    ]);
$user->roles()->attach('teacher', ['faculty_id' => $faculty]);

Могу ли я изменить «учитель» на 2, используя Accessors & Mutators?

1 Ответ

0 голосов
/ 16 января 2020

Второй аргумент belongsToMany() относится к имени таблицы, а не к пользовательской сводной модели. Вместо этого используйте using().

Вам также необходимо добавить role_id к вызову withPivot:

public function roles()
{
    return $this->belongsToMany(Role::class)->using(UserRole::class)
        ->withPivot('faculty_id', 'status', 'role_id');
}
...