php - 关于 Laravel 关系和性能的问题

标签 php laravel

我希望你过得愉快。我正在学习 Laravel,当你在 Laravel 中加载关系时,导师谈到了,就像这样

    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,以及它如何查询数据库
我希望我有道理,感谢您的时间和回答。

最佳答案

以下对数据库执行选择查询$this->follows()->pluck('id');follows()返回 query builder (这是一个尚未执行的 sql 语句)然后在结果上选择 id 列并返回 collectionid
您可以通过 $this->follows()->dd() 转储查询构建器来查看查询
而在第二个选项中$this->follows->pluck('id')直到 $this->follows laravel 执行查询并返回所有记录作为 collection例如,您将能够看到每条记录的所有属性。然后->pluck('id')正在 laravel 集合类上执行,它将执行我认为类似于 array_column 的操作函数执行并仅返回 id柱子。
正如您在第二个操作中可以轻松看到的那样,首先从数据库中检索整个数据集,然后选择所需的属性/列(2 个不同且繁重的操作)。在第一个选项中,我们直接告诉 eloquent 只选择所需的列,与第二个选项相比,这只是一个更轻的操作。

关于php - 关于 Laravel 关系和性能的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63150853/

相关文章:

php - mysql查询错误opencart过滤价格

php - Behat + Symfony,未加载自定义定义

php - 带有 Auth 的 Laravel 处理程序错误上下文中的错误

php - Laravel 8 - 不支持的授权类型

php - 哪个更好 : sha1_file(f) or sha1(file_get_contents(f))?

php - 关于 Google 安全浏览 API

php - 如何将SQL查询返回到格式整齐的表中

php - 你如何使用 Laravel 在 PHP 中处理 paypal webhook 事件?

php - 如果存在数组,则需要 Laravel 验证数组元素

php - Laravel "partial"播种