content - laravel foreach index
laravel Eloquent where cláusula (3)
Intento obtener todos los usuarios de un país específico a través de Eloquent.
El problema es que obtengo todo el registro, la cláusula where no funciona.
$res = User::with(array(''country'' => function($query) {
$query->where(''country'', ''='', ''salope'');
}))->get();
Siguiendo este patrón de la documentación de Laravel
$users = User::with(array(''posts'' => function($query)
{
$query->where(''title'', ''like'', ''%first%'');
}))->get();
Mis modelos:
class User extends SentryUserModel {
public function country() {
return $this->belongsTo(''country'',''country_id'');
}
}
class Country extends Eloquent {
public function users() {
return $this->hasMany(''users'');
}
}
Qué estoy haciendo mal ?
Si desea los usuarios de un país en particular, necesita algo como eso.
$users = Country::whereCounty(''salope'')->users;
dd($users);
Donde los users
son una Collection
elocuente, recorre esa Collection
y muestra a los usuarios. Si desea continuar creando su consulta en función de sus usuarios, use users()
y siga encadenando, por ejemplo:
$users = Country::whereCounty(''salope'')->users()->whereBanned(0)->get(); // Or something
dd($users);
El problema es que está recuperando a todos los usuarios y luego limitando solo los países que esos usuarios pueden tener. Así que vas a terminar con todos los usuarios, y no solo con los que pertenecen a Salope.
Creo que la solución es ir hacia atrás.
$country = Country::where(''name'', ''salope'')->with(''users'')->first();
foreach($country->users as $user)
{
echo $user->username;
}
Encontré lo que estaba buscando con la versión de laravel 4.1. Mi pregunta no fue formulada correctamente. Quería consultar una relación.
$posts = Post::whereHas(''comments'', function($q)
{
$q->where(''content'', ''like'', ''foo%'');
})->get();
entonces con mi ejemplo:
$res = User::whereHas(''country'', function($q) {
$q->where(''country'', ''salope'');
})->get();