laravel 4 - wie limitiere ich (Take and Skip) für beredtes ORM?
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
?
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-GeneratorMit 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 ORMWenn 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
?