validacion tablas relacionadas reglas para obtener framework documentacion datos consultas mysql laravel laravel-4 limit eloquent

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 ?