关于 laravel 关系和性能的问题

Posted

技术标签:

【中文标题】关于 laravel 关系和性能的问题【英文标题】:question about laravel relationships and performance 【发布时间】: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,以及它如何查询数据库 我希望我有道理,感谢您的时间,并回答。

【问题讨论】:

也许这对你有帮助 [***.com/questions/28223289/… 这里有一个简短的答案:***.com/a/28224427 【参考方案1】:

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

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

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

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

而在第二个选项中

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

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

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

【讨论】:

以上是关于关于 laravel 关系和性能的问题的主要内容,如果未能解决你的问题,请参考以下文章

Larave中CSRF攻击

我想自学laraver,请诸位前辈给一些建议,谢谢

Laravel 延迟加载的问题

如何通过多对多关系获取与同一张表相关的行 - Laravel

larave学习笔记1-安装配置

laraver框架学习------工厂模型填充测试数据