【问题标题】:Is Laravel's 'pluck' method cheaper than a general 'get'?Laravel 的 'pluck' 方法比一般的 'get' 便宜吗?
【发布时间】:2021-11-10 08:19:25
【问题描述】:
我正在尝试为我正在构建的应用程序大幅减少昂贵的数据库查询,并认为我应该只返回子集合的 ID(然后从我的 React 状态中找到相关对象),而不是返回孩子们自己。
我想我是在问,如果我使用 'pluck' 只返回子 ID,是否比一般的 'get' 更有效,或者我会这是在浪费我的时间吗?
【问题讨论】:
标签:
laravel
eloquent
laravel-eloquent
【解决方案1】:
是的,如果您尝试从表中检索单列,pluck 方法就可以了。
如果您使用 get() 方法,它将检索有关子模型的所有信息,这可能会导致查询和获取结果的过程稍慢。
所以在我看来,您正在使用很好的方法来检索结果。
Laravel 也有不同的选择查询方法。这里可以看Selects。
【解决方案2】:
在应用程序中执行数据库选择查询的最佳做法是选择必要的列。如果需要id 列,则应选择id 列,而不是所有列。否则,它将花费不必要的内存来保存未使用的数据。如果你头脑清楚,pluck 和get 是一样的:
Model::pluck('id')
// which is the same as
Model::select('id')->get()->pluck('id');
// which is the same as
Model::get(['id'])->pluck('id');
【解决方案3】:
我知道我参加聚会有点晚了,但我自己也想知道这一点,所以我决定研究一下。它证明了一种方法比另一种方法更快。
使用Model::select('id')->get() 比使用Model::get()->pluck('id') 快。
这是因为Illuminate\Support\Collection::pluck 将遍历每个返回的Model 并使用 PHP foreach 循环仅提取选定的列,而第一种方法通常会降低成本,因为它是数据库查询。