Pemalam peranan Spatie untuk pengguna Laravel + benih dengan peranan, tiada peranan diberikan
P粉637866931
P粉637866931 2023-09-05 23:24:56
0
1
613
<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>
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 itu DB::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