2017-10-25 1 views
0
Users UserChallenges(user_id,challenge_id) Challenges(start,end) 

나는 주어진 timerange 내에서 사용자의 모든 UserChallenges을 얻으려면 :laravel 어디 조인하지 않고 관련 테이블에 대한 기준?

$challengeIds = Challenge::where('start', '>=', $timestamp) 
      ->where('end', '<=', $timestamp)->pluck('id'); 

UserChallenge::where('user_id', $userId)->whereIn('id', $challengeIds)->get(); 

내가 조인을 사용하여 하나 개의 쿼리에서 그것을 할 수 있다는 것을 알고 있지만 나는를 사용하여 더 웅변과 같은 방법을 선호 나는 모델에 셋업 한 관계들. 어떻게 든 가능합니까?

$users = User::where('id', $userId) 
      ->whereHas('challenges', function ($q) use ($timestamp) { 
       $q->where('start', '>=', $timestamp) 
        ->where('end', '<=', $timestamp); 
      })->get(); 

또한 사용자 모델에서 belongsToMany 방법을 정의해야합니다 :

+0

원하는 것을 100 % 이해할 수는 없지만 관계 및 WhereHas() 메소드가 도움이된다고 생각합니다. https://laravel.com/docs/5.5/eloquent-relationships#querying-relationship-existence –

답변

2

whereHas 방법을 사용해보십시오.