>  Q&A  >  본문

Laravel용 Spatie 역할 플러그인 + 역할이 있는 시드 사용자, 할당된 역할 없음

<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>
P粉637866931P粉637866931382일 전507

모든 응답(1)나는 대답할 것이다

  • P粉216807924

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

    문제는 모델이 존재하는 경우 할당역할과 동기화역할의 spatie가 작동한다는 것입니다

    Laravel 모델에는 "exists" 속성이 있다는 뜻입니다

    vendorspatielaravel-permissionsrcTraitsHasRoles.php에는 할당Role 함수의 일부 코드가 있습니다

    • syncRoles는 할당Role

      의 래퍼입니다. 으아악

    따라서 DB::table('users')->insert($arrayWithUsersData); 모델의 "존재" 매개변수는 원본 데이터에 적용되므로 변경하지 마세요

    그래서 사용자를 하나씩 생성하고 저장하는 방식으로 전환해야 했습니다

    으아악

    이제 Spatie가 귀하에게 합당한 관계를 만들어드립니다.

    회신하다
    0
  • 취소회신하다