$guardName,'name'=>$roleN"> Pemalam peranan Spatie untuk pengguna Laravel + benih dengan peranan, tiada peranan diberikan-Soal Jawab Rangkaian PHP Cina
Pemalam peranan Spatie untuk pengguna Laravel + benih dengan peranan, tiada peranan diberikan
P粉637866931
P粉637866931 2023-09-05 23:24:56
0
1
480

Dalam Laravel 9 Saya cuba menambah peranan kepada pengguna

Spatie baru sahaja memproses semuanya tanpa ralat, tetapi dalam pangkalan data hubungan antara peranan dan pengguna tidak muncul dalam model untuk jadual "model_has_role"

Saya mencipta aksara yang serupa

$roleName = 'MyRole'; $guardName = 'MyGuard'; $roleObj = Role::create(['guard_name' => $guardName, 'name' => $roleName]);

Kemudian buat pengguna, contohnya

$user = new User($userDatas);

Saya mengumpul semua data yang perlu diisi daripada model

$arrayWithUsersData = []; foreach($pengguna sebagai $pengguna) { if($pengguna !== NULL) { $arrayWithUsersData[] = $user->getAttributes(); } }

Selepas ini, saya cuba memasukkan semua pengguna ke dalam pangkalan data sekaligus, jadi saya menggunakan

DB::table('users')->insert($arrayWithUsersData);

Akhirnya saya mencuba sebarang cara yang mungkin untuk menetapkan peranan dalam setiap $pengguna Suka:

$user->assignRole($roleName); $user->assignRole($roleName, $guardName); $user->assignRole([$roleName, $guardName]); $user->assignRole($myRole); $user->assignRole($myRole, $guardName); $user->assignRole([$myRole, $guardName]); $user->syncRoles($myRole); $user->syncRoles($myRole, $guardName); $user->syncRoles([$myRole, $guardName]);

Tetapi tiada ralat diberikan tetapi masih tiada perhubungan diwujudkan

P粉637866931
P粉637866931

membalas semua (1)
P粉216807924

Masalahnya ialah spatie dalam allocateRole dan syncRole berfungsi jika model wujud

Maksud saya model Laravel mempunyai sifat "wujud"

vendorspatielaravel-permissionsrcTraitsHasRoles.php mempunyai beberapa kod daripada fungsi allocateRole

  • syncRoles ialah pembalut untuk allocateRole

    $model = $this->getModel(); if ($model->exists) { $this->roles()->sync($roles, false); $model->load('roles'); } else { $class = \get_class($model); $class::saved( function ($object) use ($roles, $model) { if ($model->getKey() != $object->getKey()) { return; } $model->roles()->sync($roles, false); $model->load('roles'); } ); }

Oleh ituDB::table('users')->insert($arrayWithUsersData);jangan ubah parameter "wujud" dalam model kerana ia terpakai pada data asal

Jadi saya terpaksa bertukar kepada mencipta pengguna satu demi satu dan menyimpannya

$user = new User($userData); $user->save();

Kini Spatie mewujudkan perhubungan yang anda layak.

    Muat turun terkini
    Lagi>
    kesan web
    Kod sumber laman web
    Bahan laman web
    Templat hujung hadapan
    Tentang kita Penafian Sitemap
    Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!