在Laravel Eloquent中,限制vs采取的区别是什么?

rot*_*rcz 6 php laravel eloquent

在文档中,它显示以下内容:

要限制查询返回的结果数,或跳过查询中给定数量的结果,可以使用skip和take方法:

$users = DB::table('users')->skip(10)->take(5)->get();
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用限制和偏移方法:

$users = DB::table('users')
            ->offset(10)
            ->limit(5)
            ->get();
Run Code Online (Sandbox Code Playgroud)

这两者有什么不同?执行速度有什么不同吗?

Rwd*_*Rwd 15

take()只是一个别名limit():

/**
 * Alias to set the "limit" value of the query.
 *
 * @param  int  $value
 * @return \Illuminate\Database\Query\Builder|static
 */
public function take($value)
{
    return $this->limit($value);
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 它不是"唯一"的别名!这一切都取决于如果您正在使用的集合或"雄辩集合"的工作,后者是*别名*样,但是如果你使用集合其简单地限制样的功能,你从RDBMS知道集合对象.请参阅源https://github.com/laravel/framework/blob/5.4/src/Illuminate/Support/Collection.php#L1346我为使用谷歌的人们添加了这条评论,但不知道EloquentCollection是不同的,但非常类似于收藏. (3认同)
  • @rotaercz 是的,是的:) (2认同)
  • @RossWilson 我知道,这就是为什么我添加了“我添加了此评论...” (2认同)

X 4*_* IR 10

limit仅适用于 eloquent ORM 或查询构建器对象,而take适用于集合和 ORM 或查询构建器对象。

Model::get()->take(20);   // Correct
Model::get()->limit(20);  // Incorrect

Model::take(20)->get()    // Correct
Model::limit(20)->get()   // Correct
Run Code Online (Sandbox Code Playgroud)