我希望你过得愉快。我正在学习 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 列并返回 collection的 id
秒
您可以通过 $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/