laravel eloquent 在这个方法链中什么时候执行数据库查询?

问题描述 投票:0回答:1

我正在使用 Laravel Eloquent,并且正在使用链式方法构建查询。据我所知,有些方法会触发查询的执行,而另一些方法只是构建查询。我有这个方法链:

$tags = $user->tags()->where('tag', 'like', '%' . $tag . '%')
            ->whereNotIn('tag', $file_tags)
            ->pluck('tag')
            ->take(10)
            ->toArray(); 

我根本没有打电话给

get()
,但我还是得到了结果。

我的问题是:

  1. 数据库查询在什么时候真正在这条链中执行?是在
    pluck()
    take()
    toArray()
    ,还是其他地方?我是否正确地从数据库中只查询了 10 个项目,或者我只是查询了整个数据集然后告诉 php 仅返回 10 个?
  2. pluck('tag')
    select('tag')
    相同,还是查询
    select('*')
    并且PHP处理它以仅返回“标签”列?
laravel eloquent
1个回答
0
投票

所以这就是代码中发生的情况,当您编写

where()
whereIn()
时,您基本上只是在构建查询,查询在
pluck()
中执行,并返回满足
where()
 中条件的所有行whereIn()
take(10)
仅限制所有查询结果中的 10 个结果。所以回答你的问题:

  1. 它是
    pluck()
    触发查询执行的。如果您只想从数据库中查询 10 个,则应该将
    take(10)
    移到
    pluck()
  2. 之前
  3. pluck()
    负责查询执行,而
    select()
    仅构建查询。您应该使用
    get()
    first()
    来触发它。但在功能上,它的工作原理是相同的,它们立即执行查询来选择
    tag

https://laravel.com/docs/11.x/collections#method-pluck

© www.soinside.com 2019 - 2024. All rights reserved.