ホームページ  >  に質問  >  本文

Laravel + ロールを持つシードユーザー用の Spatie ロールプラグイン、ロールが割り当てられていない

<p>Laravel 9 の場合 ユーザーにロールを追加してみました</p> <p>Spatie はエラーなしですべてを処理しましたが、データベースではロールとユーザーの関係がテーブル「model_has_role」のモデルに表示されません</p> <p><code>似たようなキャラクターを作成しました</code></p> <pre class="brush:php;toolbar:false;">$roleName = 'MyRole'; $guardName = 'myGuard'; $roleObj = Role::create(['guard_name' => $guardName, 'name' => $roleName]);</pre> <p><code>次に、ユーザーを作成します (例: </code></p>)。 <pre class="brush:php;toolbar:false;">$user = new User($userDatas);</pre> <p><code>入力する必要があるすべてのデータをモデルから収集しました</code></p> <pre class="brush:php;toolbar:false;">$arrayWithUsersData = []; foreach($users として $user) { if($users !== NULL) { $arrayWithUsersData[] = $user->getAttributes(); } }</pre> <p><code>この後、すべてのユーザーを一度にデータベースに挿入しようとしたため、</code></p> を使用しました。 <pre class="brush:php;toolbar:false;">DB::table('users')->insert($arrayWithUsersData);</pre> <p>最後に、foreach $users でロールを割り当てる可能な方法を試してみました。 いいね: </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>エラーは表示されませんが、関係は作成されません</p>
P粉637866931P粉637866931432日前598

全員に返信(1)返信します

  • P粉216807924

    P粉2168079242023-09-06 19:18:57

    問題は、モデルが存在する場合、allocateRole と syncRole の spatie が機能することです。

    Laravel モデルには「exists」属性があるということです

    vendor\spatie\laravel-permission\src\Traits\HasRoles.php には、allocateRole 関数のコードが含まれています

    • syncRoles は、allocateRole

      のラッパーです。 リーリー

    したがって DB::table('users')->insert($arrayWithUsersData); モデル内のパラメーター「exists」は元のデータに適用されるため、変更しないでください

    そのため、ユーザーを 1 人ずつ作成して保存する方法に切り替える必要がありました。

    リーリー

    これで、スパティは適切な関係を築きました。

    返事
    0
  • キャンセル返事