아직 첨부되지 않은 경우 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 |