Spatie-Rollen-Plugin für Laravel + Seed-Benutzer mit Rollen, keine zugewiesenen Rollen
P粉637866931
2023-09-05 23:24:56
<p>In Laravel 9
Ich habe versucht, dem Benutzer</p> eine Rolle hinzuzufügen.
<p>Spatie hat gerade alles fehlerfrei verarbeitet, aber in der Datenbank erscheint die Beziehung zwischen Rolle und Benutzer nicht im Modell für die Tabelle „model_has_role“</p>
<p><code>Ich habe einen ähnlichen Charakter erstellt</code></p>
<pre class="brush:php;toolbar:false;">$roleName = 'MyRole';
$guardName = 'myGuard';
$roleObj = Role::create(['guard_name' => $guardName, 'name' => $roleName]);</pre>
<p><code>Dann erstellen Sie einen Benutzer, zum Beispiel </code></p>
<pre class="brush:php;toolbar:false;">$user = new User($userDatas);</pre>
<p><code>Ich habe alle Daten gesammelt, die aus dem Modell ausgefüllt werden sollten</code></p>
<pre class="brush:php;toolbar:false;">$arrayWithUsersData = [];
foreach($users als $user)
{
if($users !== NULL)
{
$arrayWithUsersData[] = $user->getAttributes();
}
}</pre>
<p><code>Danach habe ich versucht, alle Benutzer auf einmal in die Datenbank einzufügen, also habe ich </code></p>
<pre class="brush:php;toolbar:false;">DB::table('users')->insert($arrayWithUsersData);</pre>
<p>Schließlich habe ich jede mögliche Möglichkeit ausprobiert, Rollen in foreach $users zuzuweisen
Gefällt mir: </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>Aber es wird kein Fehler ausgegeben, aber es wird trotzdem keine Beziehung erstellt</p>
问题是,如果模型存在,则 allocateRole 和syncRole 中的 spatie 有效
我的意思是 Laravel 模型具有“存在”属性
vendor\spatie\laravel-permission\src\Traits\HasRoles.php 中有一些来自 allocateRole 函数的代码
syncRoles 是 allocateRole 的包装器
因此
DB::table('users')->insert($arrayWithUsersData);
不要更改模型中的参数“exists”,因为它适用于原始数据所以我必须切换为一一创建用户并保存它们
现在 Spatie 创建应有的关系。