Laravel 4: ¿Cómo limitar (tomar y omitir) para el ORM elocuente?
¿Puede limitar una consulta de ORM Eloquent como usartake()
yskip()
¿Por lo tanto, la consulta mysql resultante también está limitada y no tiene que devolver todo el conjunto de datos?
Si es así, ¿cómo modificarías?
$test = User::find(1)->games->toArray();
Para incluirlimit 3 offset 2
?
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 consultasUsando el Laravel regularConsultor de construcción Puedo conseguir todogames
que pertenecen auser
de id 1, y limitar el resultado contake()
yskip()
:
$test = DB::table('games')
->join('userGames', 'userGames.game_id', '=', 'games.id')
->where('userGames.user_id', '=', '1')->take(3)->skip(2)->get();
Escuchando elilluminate.query
evento 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 ElocuenteCuando intento recrear la misma consulta con Eloquent:
$test = User::find(1)->games->take(2)->toArray();
Soy capaz de usartake
pero añadiendoskip
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 para que en el nivel de consulta MYSQL también limite el resultado, equivalente alimit 3 offset 2
?