mysql - tablas - reglas de validacion en laravel
Laravel 4: ¿Cómo limitar(tomar y omitir) para el ORM elocuente? (1)
User::find(1)->games()->take(3)->skip(2)->get();
Creo que esto debería darte tu colección. :)
->games
te dará una colección, donde ->games()
ofrecerá una instancia de generador de consultas.
Disfruta Laravel!
TL; DR
¿Puede limitar una consulta ORM elocuente como usar take()
y skip()
para que la consulta mysql resultante también sea limitada y no tenga que devolver el conjunto de datos completo?
Si es así, ¿cómo modificarías?
$test = User::find(1)->games->toArray();
¿Para incluir limit 3 offset 2
?
Mesas:
users games userGames
-- id -- id -- user_id
-- name -- name -- game_id
-- steam_id
Modelos:
class User extends Eloquent {
public function games() {
return $this->belongsToMany(''Game'', ''userGames'', ''user_id'', ''game_id'');
}
}
class Game extends Eloquent {
public function users() {
return $this->belongsToMany(''User'', ''userGames'', ''user_id'', ''game_id'');
}
}
Límite en el generador de consultas
Usando el Generador de consultas Laravel regular, puedo obtener todos los games
que pertenecen al user
de id 1, y limitar el resultado con take()
y skip()
:
$test = DB::table(''games'')
->join(''userGames'', ''userGames.game_id'', ''='', ''games.id'')
->where(''userGames.user_id'', ''='', ''1'')->take(3)->skip(2)->get();
Al escuchar el evento illuminate.query
puedo ver que la consulta generada por esto es:
select * from `games`
inner join `userGames`
on `userGames`.`game_id` = `games`.`id`
where `userGames`.`user_id` = ?
limit 3 offset 2
Límite en ORM Elocuente
Cuando intento recrear la misma consulta con Eloquent:
$test = User::find(1)->games->take(2)->toArray();
Soy capaz de usar take
pero agregar skip
causa un error. Además, la consulta resultante no contiene realmente el límite:
select `games`.*, `userGames`.`user_id` as `pivot_user_id`,
`userGames`.`game_id` as `pivot_game_id` from `games`
inner join `userGames`
on `games`.`id` = `userGames`.`game_id`
where `userGames`.`user_id` = ?
Por lo tanto, parece que primero se consulta todo el resultado, lo que no es ideal cuando se trata de grandes conjuntos de datos.
Pregunta:
¿Es posible limitar una consulta ORM elocuente de modo que, en el nivel de consulta MYSQL, también limite el resultado, equivalente a un limit 3 offset 2
?