laravel 4 - wie limitiere ich (Take and Skip) für beredtes ORM?

TL; DR

Können Sie eine eloquente ORM-Abfrage wie die Verwendung von einschränken?take() undskip() Damit die resultierende MySQL-Abfrage auch begrenzt ist und nicht den gesamten Datensatz zurückgeben muss?

Wenn ja, wie würden Sie ändern:

$test = User::find(1)->games->toArray();

Einschließenlimit 3 offset 2?

Tabellen:
users       games           userGames
-- id       -- id           -- user_id
-- name     -- name         -- game_id
            -- steam_id
Modelle:
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');
    }
}
Beschränkung im Abfrage-Generator

Mit dem normalen LaravelAbfrage Ersteller Ich kann alles bekommengames das gehört zuuser von id 1, und begrenzen Sie das Ergebnis mittake() undskip():

$test = DB::table('games')
    ->join('userGames', 'userGames.game_id', '=', 'games.id')
    ->where('userGames.user_id', '=', '1')->take(3)->skip(2)->get();

Durch das Anhören derilluminate.query Ereignis kann ich sehen, dass die Abfrage dadurch generiert wird:

select * from `games`
inner join `userGames`
on `userGames`.`game_id` = `games`.`id`
where `userGames`.`user_id` = ?
limit 3 offset 2
Limit im eloquenten ORM

Wenn ich versuche, dieselbe Abfrage mit Eloquent neu zu erstellen:

$test = User::find(1)->games->take(2)->toArray();

Ich kann es benutzentake aber hinzufügenskip verursacht einen Fehler. Die resultierende Abfrage enthält auch nicht das Limit:

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` = ?

Es scheint also, dass zuerst das gesamte Ergebnis abgefragt wird, was bei großen Datenmengen nicht optimal ist.

Frage:

Ist es möglich, eine eloquente ORM-Abfrage so einzuschränken, dass sie auf der Ebene der MYSQL-Abfrage auch das Ergebnis einschränkt, entsprechendlimit 3 offset 2?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage