Pemalam peranan Spatie untuk pengguna Laravel + benih dengan peranan, tiada peranan diberikan
P粉637866931
2023-09-05 23:24:56
<p>Dalam Laravel 9
Saya cuba menambah peranan kepada pengguna</p>
<p>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"</p>
<p><kod>Saya mencipta aksara yang serupa</code></p>
<pre class="brush:php;toolbar:false;">$roleName = 'MyRole';
$guardName = 'MyGuard';
$roleObj = Role::create(['guard_name' => $guardName, 'name' => $roleName]);</pre>
<p><kod>Kemudian buat pengguna, contohnya </code></p>
<pre class="brush:php;toolbar:false;">$user = new User($userDatas);</pre>
<p><kod>Saya mengumpul semua data yang perlu diisi daripada model</code></p>
<pre class="brush:php;toolbar:false;">$arrayWithUsersData = [];
foreach($pengguna sebagai $pengguna)
{
if($pengguna !== NULL)
{
$arrayWithUsersData[] = $user->getAttributes();
}
}</pre>
<p><kod>Selepas ini, saya cuba memasukkan semua pengguna ke dalam pangkalan data sekaligus, jadi saya menggunakan </code></p>
<pre class="brush:php;toolbar:false;">DB::table('users')->insert($arrayWithUsersData);</pre>
<p>Akhirnya saya mencuba sebarang cara yang mungkin untuk menetapkan peranan dalam setiap $pengguna
Suka: </p>
<pre class="brush:php;toolbar:false;">$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]);</pre>
<p>Tetapi tiada ralat diberikan tetapi masih tiada perhubungan diwujudkan</p>
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
Oleh itu
DB::table('users')->insert($arrayWithUsersData);
jangan ubah parameter "wujud" dalam model kerana ia terpakai pada data asalJadi saya terpaksa bertukar kepada mencipta pengguna satu demi satu dan menyimpannya
Kini Spatie mewujudkan perhubungan yang anda layak.