gpt4 book ai didi

pdo - Eloquent 是否缓存准备好的语句?

转载 作者:行者123 更新时间:2023-12-04 14:31:39 25 4
gpt4 key购买 nike

我有一系列的 INSERT 语句要执行,我想使用 Laravel 的 Eloquent 来执行:

$mountain = Mountain::find(1);
$dragons = [1, 2, 3, 4];
foreach ($dragons as $id){
$mountain->dragons()->attach($id); // Eloquent performs an `INSERT` here
}

我知道 Eloquent 使用准备好的语句,但它会在每次迭代中重新准备相同的查询,还是它足够聪明以缓存准备好的 INSERT 语句第一次迭代,然后在每个后续迭代中简单地运行 ->execute

来自 PHP's PDO documentation :

By using a prepared statement the application avoids repeating the analyze/compile/optimize cycle. This means that prepared statements use fewer resources and thus run faster.

我意识到在整个应用程序生命周期中保存每条准备好的语句可能不是最好的主意,但在某些情况下似乎有必要。如果 Eloquent 默认不这样做,有没有办法告诉它为特定模型操作缓存准备好的语句?

最佳答案

checkout Illuminate\Database\Eloquent\Relations\BelongsToMany.php::attach

有一个调用$query->insert,它是Illuminate\Database\Query\Builder类的一个实例。

现在看一下上述 Builder 类中的方法 insert

我不会发布 Laravel 代码,因为它太长了,但是您可以清楚地看到查询是针对当前连接立即编译和执行的。

开源代码的好处是你可以自由地浏览它,所以不要害怕浏览它。

正如你的常识所指出的,这里节省的时间是微乎其微的。如果您要执行很多插入,这将不是您的瓶颈。也许看看队列或后台服务——当您的应用程序执行 1000 次插入时,用户不需要等待。

关于pdo - Eloquent 是否缓存准备好的语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32786205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com