我正在使用 Laravel Eloquent,并且正在使用链式方法构建查询。据我所知,有些方法会触发查询的执行,而另一些方法只是构建查询。我有这个方法链:
$tags = $user->tags()->where('tag', 'like', '%' . $tag . '%')
->whereNotIn('tag', $file_tags)
->pluck('tag')
->take(10)
->toArray();
我根本没有打电话给
get()
,但我还是得到了结果。
我的问题是:
pluck()
、take()
、toArray()
,还是其他地方?我是否正确地从数据库中只查询了 10 个项目,或者我只是查询了整个数据集然后告诉 php 仅返回 10 个?pluck('tag')
与select('tag')
相同,还是查询select('*')
并且PHP处理它以仅返回“标签”列?所以这就是代码中发生的情况,当您编写
where()
和 whereIn()
时,您基本上只是在构建查询,查询在 pluck()
中执行,并返回满足 where()
和 中条件的所有行whereIn()
。 take(10)
仅限制所有查询结果中的 10 个结果。所以回答你的问题:
pluck()
触发查询执行的。如果您只想从数据库中查询 10 个,则应该将 take(10)
移到 pluck()
pluck()
负责查询执行,而 select()
仅构建查询。您应该使用 get()
或 first()
来触发它。但在功能上,它的工作原理是相同的,它们立即执行查询来选择 tag
值