2013-11-14 6 views
3

나는 Eloquent를 통해 특정 국가의 모든 사용자를 얻으려고합니다.laravel Eloquent where 절

문제는 모든 레코드를 가져오고 where 절이 작동하지 않는다는 것입니다.

$res = User::with(array('country' => function($query) { 
      $query->where('country', '=', 'salope'); 
     }))->get(); 

laravel 문서에서이 패턴에 따라

$users = User::with(array('posts' => function($query) 
{ 
    $query->where('title', 'like', '%first%'); 
}))->get(); 

내 모델 : 내가 잘못 뭐하는 거지

class User extends SentryUserModel { 
    public function country() { 

     return $this->belongsTo('country','country_id'); 
    } 
} 
class Country extends Eloquent { 
    public function users() { 

     return $this->hasMany('users'); 
    } 

} 

?

+1

왜'-> 여기서 ('country_id', $ country-> 아이디)'? –

+0

어떤 오류가 발생합니까? – afarazit

+0

오류없이 모든 레코드 만 표시됩니다. 나는 그것들을 where 절로 필터링하려고한다. –

답변

3

laravel 4.1 버전을 사용하고 있습니다. 내 질문이 올바르게 작성되지 않았습니다. 나는 관계를 묻고 싶다. 그래서 내 exemple와

$posts = Post::whereHas('comments', function($q) 
{ 
    $q->where('content', 'like', 'foo%'); 

})->get(); 

:

$res = User::whereHas('country', function($q) { 
     $q->where('country', 'salope'); 
     })->get(); 

Documentation link

1

특정 국가의 사용자가 필요하면 그런 것이 필요합니다. usersCollection 통해 웅변 Collection하고 루프와 사용자를 표시

$users = Country::whereCounty('salope')->users; 
dd($users); 

. 당신은 예를 들어, 사용자가 users()를 사용에 대한 사용자의 검색어가 구축 계속 체인 유지하려는 경우 :

$users = Country::whereCounty('salope')->users()->whereBanned(0)->get(); // Or something 
dd($users); 
+0

내가 $ users = Country :: where ('country', 'salope') -> users 할 때 정의되지 않은 속성 –

+0

은'Country' 모델에서'$ with' 속성을'public $ with = array ('users')'를 사용하여 관계를 열망하고 위의 예제를 다시 시도하십시오 – afarazit

2

을 문제는 당신이 사용자 만이 가질 수있는 국가를 제한하는 모든 사용자를 검색하고 있습니다입니다. 따라서 Salope에 속한 사용자뿐만 아니라 모든 사용자가 여전히 끝나게 될 것입니다.

해결 방법은이 문제를 거슬러 올라가는 것입니다.

$country = Country::where('name', 'salope')->with('users')->first(); 

foreach($country->users as $user) 
{ 
    echo $user->username; 
}