【问题标题】:question about laravel relationships and performance关于 laravel 关系和性能的问题
【发布时间】:2020-11-18 21:09:18
【问题描述】:

我希望你玩得开心。我正在学习 laravel,当你在 laravel 中加载关系时,inscuctor 谈到了,就像这样

    public function timeline()
    {
        $ids = $this->follows()->pluck('id');
        $ids->push($this->id);
        return Tweet::whereIn('user_id', $ids)->latest()->get();
    }

我的模型中有一个跟随关系,他谈到了这条线

$ids = $this->follows()->pluck('id');

性能比这条线更好

$ids = $this->follows->pluck('id');

我的问题是,laravel 在第一种情况下如何提取 id,以及它如何查询数据库 我希望我有道理,感谢您的时间,并回答。

【问题讨论】:

标签: php laravel


【解决方案1】:

以下对数据库执行选择查询

$this->follows()->pluck('id');

follows() 返回一个 query builder(这是一条尚未执行的 sql 语句),然后在结果上选择 id 列并返回一个 collectionids

您可以通过$this->follows()->dd() 转储查询生成器来查看查询

而在第二个选项中

$this->follows->pluck('id')

直到$this->follows laravel 执行查询并将所有记录作为collection 实例返回,您将能够看到每条记录的所有属性。然后->pluck('id') 在 laravel 集合类上执行,它会执行我假设类似于array_column 函数的操作,并且只返回id 列。

正如您在第二次操作中很容易看到的那样,首先从数据库中检索整个数据集,然后选择所需的属性/列(2 个不同且繁重的操作)。而在第一个选项中,我们直接告诉 eloquent 只选择所需的列,与第二个选项相比,这只是一个更轻的操作。

【讨论】:

    猜你喜欢
    • 2020-08-09
    • 2013-04-03
    • 2011-05-28
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    相关资源
    最近更新 更多