nullable 외래 키가 있는 laravel 피벗 테이블
문제
피벗 테이블을 다음과 같이 설정했습니다.
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);
제휴하지 않습니다 StackOverflow