2013-11-14 5 views
3

Я пытаюсь получить всех пользователей из определенной страны через Eloquent.laravel Eloquent where 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', $ страновые> идентификатор)'? –

+0

Какая ошибка вы получаете? – afarazit

+0

Нет ошибок, только вся запись. Я хотел бы отфильтровать их с предложением where –

ответ

3

Я нашел то, что искал с версией laravel 4.1. Мой вопрос сформулирован неправильно. Я хотел запросить отношения.

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

})->get(); 

так с моим Exemple:

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

Documentation link

1

Если вы хотите, чтобы пользователи для определенной страны вам были нужны что-то в этом роде.

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

Где users красноречивый Collection и вы перебираем, что Collection и отображения пользователей. Если вы хотите продолжать строить на основе вашего запроса на ваши пользователи используют users() и держать сцепление, например:

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

, когда я делаю $ users = Country :: where ('country', 'salope') -> users Он говорит Undefined property –

+0

добавляет свойство '$ with' в вашу модель' Country', например 'public $ with = array ('users') ', чтобы оживить загрузку отношений и повторить попытку вышеприведенного примера – afarazit

2

Проблема заключается вы извлечение всех пользователей, а затем ограничение только страны, эти пользователи могут иметь. Таким образом, вы все равно останетесь со всеми пользователями, а не только с теми, кто принадлежит Салопе.

Я думаю, что решение должно пройти это назад.

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

foreach($country->users as $user) 
{ 
    echo $user->username; 
} 
Смежные вопросы