关于 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 的 id
s
您可以通过$this->follows()->dd()
转储查询生成器来查看查询
而在第二个选项中
$this->follows->pluck('id')
直到$this->follows
laravel 执行查询并将所有记录作为collection 实例返回,您将能够看到每条记录的所有属性。然后->pluck('id')
在 laravel 集合类上执行,它会执行我假设类似于array_column
函数的操作,并且只返回id
列。
正如您在第二次操作中很容易看到的那样,首先从数据库中检索整个数据集,然后选择所需的属性/列(2 个不同且繁重的操作)。而在第一个选项中,我们直接告诉 eloquent 只选择所需的列,与第二个选项相比,这只是一个更轻的操作。
【讨论】:
以上是关于关于 laravel 关系和性能的问题的主要内容,如果未能解决你的问题,请参考以下文章