Laravel 8:attach() 似乎不起作用

时间:2021-04-26 05:10:21

标签: php laravel laravel-8

我想为每个注册新帐户的用户添加一个新角色。所以在 RegisterController.php,我添加了这个:

protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);

        $role = Role::where('name', 'manual user')->first();

        $user->roles()->attach($role->id);

        return $user;
    }

而且我已经在 manual user 表中有名为 roles 的行:

enter image description here

但是现在的问题是,每当我尝试注册新用户时,它都不会将 $role->id 附加到数据透视表 role_user 表中!!

请注意,我还添加了这些关系:

User.php

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

Role.php

public function users()
    {
        return $this->belongsToMany(User::class);
    }

role_user 表的迁移是这样的:

public function up()
    {
        Schema::create('role_user', function (Blueprint $table) {
            $table->unsignedBigInteger('user_id');
            $table->unsignedBigInteger('role_id');
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
            $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
            $table->timestamps();
        });
    }

那么这里出了什么问题?我该如何解决这个问题?

我真的很感激你们的任何想法或建议......

提前致谢。

1 个答案:

答案 0 :(得分:0)

您在方法的第一行说 return User::create([,同时使用 $user 变量进行附加。将其更改为 $user = User::create([