문제

피벗 테이블을 다음과 같이 설정했습니다.

user_roles
  user_id //fk->users.id
  assoc_id //nullable fk->association.id
  role //varchar

역할은 다대다 관계를 나타내기 때문에 데이터베이스를 이런 방식으로 설정했습니다.연결에는 많은 사용자가 있으며 사용자는 많은 연결에 속할 수 있습니다.모든 사용자는 연관 내에서 역할을 갖습니다.

그러나 연결 외부에 존재할 수 있는 일부 역할이 있습니다.데이터베이스는 assoc_id 필드를 입력하고 명령줄에서 수동으로 삽입할 수 있지만 실행을 시도하면

$user->roles()->attach(NULL, "outside contractor");

내 시드 파일에 다음과 같은 오류가 발생합니다.

[Illuminate\Database\QueryException]                                         
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update   
a child row: a foreign key constraint fails (`database`.`user_roles`, CONSTR  
AINT `user_roles_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users  
` (`id`)) (SQL: insert into `user_roles` () values ()) 

여기서 첫 번째 인수가 다음을 참조해서는 안 되기 때문에 이는 특히 혼란스럽습니다. assoc_id?교체할 때 NULL 유효한 assoc_id,

$user->roles()->attach(1, "outside contractor");

삽입은 잘 작동하고 첫 번째 인수는 assoc_id 테이블에.

무슨 일이 일어나고 있나요?

도움이 되었습니까?

해결책

다음에 대한 키를 제공하지 않는 경우 attach/sync, Eloquent는 아무것도 삽입하지 않습니다.당신이하려는 일은 다음과 같기 때문에 다소 예상되는 동작입니다.

X와 null 사이에 링크 만들기

이는 ORM이 수행해야 하는 작업이 아닙니다.

대신 해당 행을 수동으로 삽입하십시오.

$data = [
   'user_id' => 99, 
   'assoc_id' => null, 
   'role' => 'outside contractor'
];

DB::table('user_roles')->insert($data);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top