Laravel용 Spatie 역할 플러그인 + 역할이 있는 시드 사용자, 할당된 역할 없음
P粉637866931
2023-09-05 23:24:56
<p>Laravel 9에서
사용자</p>
<p>Spatie는 모든 것을 오류 없이 처리했지만 데이터베이스에서는 역할과 사용자 사이의 관계가 "model_has_role" 테이블의 모델에 나타나지 않습니다</p>
<p><code>비슷한 캐릭터를 만들었습니다</code></p>
<pre class="brush:php;toolbar:false;">$roleName = '내 역할';
$guardName = 'myGuard';
$roleObj = 역할::create(['guard_name' => $guardName, 'name' => $roleName]);</pre>
<p><code>그런 다음 사용자를 생성합니다. 예를 들어 </code></p>
<pre class="brush:php;toolbar:false;">$user = 새로운 사용자($userDatas);</pre>
<p><code>채워야 할 모델의 모든 데이터를 수집했습니다</code></p>
<pre class="brush:php;toolbar:false;">$arrayWithUsersData = [];
foreach($users를 $user로)
{
if($사용자 !== 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->할당Role($roleName);
$user->할당Role($roleName, $guardName);
$user->할당Role([$roleName, $guardName]);
$user->할당Role($myRole);
$user->할당Role($myRole, $guardName);
$user->할당Role([$myRole, $guardName]);
$user->syncRoles($myRole);
$user->syncRoles($myRole, $guardName);
$user->syncRoles([$myRole, $guardName]);</pre>
<p>그러나 오류는 발생하지 않지만 여전히 관계가 생성되지 않습니다</p>
문제는 모델이 존재하는 경우 할당역할과 동기화역할의 spatie가 작동한다는 것입니다
Laravel 모델에는 "exists" 속성이 있다는 뜻입니다
vendorspatielaravel-permissionsrcTraitsHasRoles.php에는 할당Role 함수의 일부 코드가 있습니다
syncRoles는 할당Role
의 래퍼입니다. 으아악따라서
DB::table('users')->insert($arrayWithUsersData);
모델의 "존재" 매개변수는 원본 데이터에 적용되므로 변경하지 마세요그래서 사용자를 하나씩 생성하고 저장하는 방식으로 전환해야 했습니다
으아악이제 Spatie가 귀하에게 합당한 관계를 만들어드립니다.