아직 첨부되지 않은 경우 Larvel 관계가 첨부
아직 관계가 붙어있지 않다면 관계를 빨리 붙일 수 있는 방법이 있을까요?모델의 관계를 업데이트하기 위해 이 코드를 사용하고 있습니다.
if (!empty($request->get('roles')) && is_array($request->get('roles'))) {
$message->Roles()->attach($request->get('roles'));
}
if (!empty($request->get('users')) && is_array($request->get('users'))) {
$message->Users()->attach($request->get('users'));
}
그러나 나는 이 오류를 받고 있습니다. 나는 이 오류입니다.
SQLSTATE[23000]:무결성 제약 조건 위반: 1062 키 'PRIMATIONAL'에 대한 중복 항목 '1-41'(SQL: insert to
message_user
(message_id
,user_id
) 값 (1, 41), (1, 42), (1, 43), (1, 44), (1, 45), (1, 46), (1, 47), (1, 48), (1, 49), (1, 50)
나는 어떤 사용자가 아직 첨부되지 않은 배열 검사 목록을 아주 길게 작성해서 첨부하는 것을 피하고 싶습니다.그리고 이게 유일한 방법인지 알려주시기 바랍니다.
나는 다음과 같은 생각을 하고 있습니다.
$message->Users()->attachIfNotAttached($request->get('users'));
Laravel에는 이에 대한 기본 제공 방법이 있습니다 - 분리 없이 동기화:
$message->Users()->syncWithoutDetaching($request->get('users'));
사용.syncWithoutDetaching
아니면sync([arr], false)
코드는 깨끗해 보이지만 성능은 25배 더 느립니다.attach()
. 각 ID를 확인하고 항목별로 개별 데이터베이스 삽입을 수행하기 때문입니다.
저는 폴 슈피겔의 답변을 토대로 웅변을 확장하거나 당신의 모델 수업에 새로운 방법을 만드는 것을 제안합니다.
내가 사용할 때는Feed
계급과.Post
다수와 다수의 피벗으로 연결된 클래스저는 피드 클래스에 다음과 같은 방법을 추가했습니다.
public function attachUniquePosts($ids)
{
$existing_ids = $this->posts()->whereIn('posts.id', $ids)->pluck('posts.id');
$this->posts()->attach($ids->diff($existing_ids));
}
- 20개의 게시물을 피드에 부착하기
syncWithoutDetaching()
평균 0.107초를 찍었습니다. - 20개의 게시물을 피드에 부착하기
attachUniquePosts()
평균 0.004초가 걸렸습니다.
이와 같은 것이 작동할 수 있습니다.
이미 첨부된 ID를 가져옵니다.
$attachedIds = $message->Users()->whereIn('id', $request->get('users'))->pluck('id');
요청 배열에서 첨부된 ID를 제거합니다.
$newIds = array_diff($request->get('users'), $attachedIds);
새 ID를 첨부합니다.
$message->Users()->attach($newIds);
정보: 다음과 같습니다.syncWithoutDetaching()
Amazon Aurora MySQL에서 작동하지 않습니다.
detach를 사용하여 확인한 후 다음과 같은 기능으로 attach를 사용할 수 있습니다.
$handleUserMoving = function ($message) use($user) {
$message->Users()->detach($user);
if (!$message->Users()->where('users.id', $user->id)->exists())
{
$message->Users()->attach($user);
}
};
$message->Users()->each($handleUserMoving);
언급URL : https://stackoverflow.com/questions/45356606/laravel-relationships-attach-if-not-already-attached
'programing' 카테고리의 다른 글
zip 파일 다운로드 방법 (0) | 2023.09.19 |
---|---|
WooCommerce 카트 유효성 검사에 추가: 카트에 추가하지 않음 (0) | 2023.09.19 |
선행 또는 후행 공백을 포함하는 MySQL 선택 필드 (0) | 2023.09.19 |
SecurityContext - Spring 3.2.2에서 인증 개체를 찾을 수 없습니다. (0) | 2023.09.14 |
Visual Studio IDE에서 XSD를 이용한 XML 검증 (0) | 2023.09.14 |