2016-12-15 1 views
0

쿼리 laravel 테이블에 문제가 있습니다.관계 테이블에 대한 Laravel 쿼리

나는 각 사용자가 첨부 파일을 가지고 있고 첨부 파일이 사용자에게 속한 것과 같은 관계가 있습니다. 나는 모델에 관계를 썼다.

제 질문은 : 관계 첨부 파일을 가지고 있지만 레벨이 사용자 수준 인 첨부 파일을 가진 사용자를 반환하려면 어떻게해야합니까? 내가 어디로 만들지라도 사용자를 위해 모든 첨부 파일을 돌려 준다. 도와주세요! 당신이 모델의 관계를 쿼리 할 때

답변

0

당신은 당신이 첨부 파일 whos는 사용자를 찾을하려는 경우

$attachments = $userModel->attachments()->get(); 

에 대한 바로 가기입니다

$attachments = $userModel->attachments; 

같은 것을 그래서 당신은

$attachments = $userModel->attachments()->where('level', 'user')->get(); 
+0

확인하지만이 경우 사용자를 먼저 받아야합니다. 같은 쿼리를 만들고 싶습니다 : Profile :: with ('attachment'). 관련된 데이터가 있지만 관련 데이터가있는 오브젝트 프로파일을 얻고 싶지만 레벨 = user_level 인 경우 –

1

을 쓸 수 있습니다 쓰기 특정 제약 조건을 충족하면 whereHas 방법

을 사용하십시오. 이미 쿼리 모델에서 원하는 경우
UserModel::whereHas('attachments', function ($attachmentQuery) { 
    $attachmentQuery->where('level', 'profile_level'); 
})->get(); 

특정 첨부 파일은 다음

$userModel->attachments()->where('level', 'profile_level')->get(); 

단일 쿼리에 UserModel 및 AttachementModel 모두를 조회하는 것은 불가능, 그것은 적어도 두 개의 쿼리해야합니다 쓰기 얻을. 모든 첨부 파일이있는 사용자를 반환하는 멋진 UserModel::with('attachments')->get();조차 내부적으로 두 개의 쿼리를 수행합니다.

편집 : 나는 정의 할 수있는 것으로 나타났습니다

relation constraints 그래서 당신은 사용자 whos는 첨부 파일을 첨부 한 후 당신이 할 수있는 특정 제약과 열망 부하를 충족 찾을하려는 경우

UserModel::with(['attachments' => function ($attachmentQuery) { 
    $attachmentQuery->where('level', 'profile_level'); 
}])->get(); 

방법 with

$queryAttachments = function ($attachmentQuery) { 
    $attachmentQuery->where('level', 'profile_level'); 
}; 

UserModel::whereHas('attachments', $queryAttachments) 
->with(['attachments' => $queryAttachments])->get(); 
+0

네, 맞습니다.하지만 첨부 파일이있는 모든 사용자는 반환하지만 모든 첨부 파일은 제외하고 레벨이 profile_level 인 첨부 파일이 필요합니다. 나는 지금 그것이 명확한 희망한다 –

+0

나는 나의 대답을 편집했다. –

+0

거의 다 OK입니다. 하지만 지금은 사용자 정보없이 첨부 파일이있는 개체가 있습니다. (나는 백엔드에서 이것을 만들 수있는 옵션이 있는지 모르겠다. 그렇지 않으면 나는 단지 모든 첨부 파일과 함께 사용자를 반환하고 fron-end에서 특정 첨부 파일을 얻는다. –

0

whereHaswith의 조합으로 시도 할 수 있습니다. 다음과 같이 변경합니다.

Profile::whereHas('attachments', function ($q) { 
     $q->where('level', 'user'); 
    }) 
    ->with(['attachments', function ($q) { 
     $q->where('level', 'user'); 
    }]) 
    ->get(); 
관련 문제