Laravel是否会复用模型?重复查询是否触发二次数据库调用?
Laravel模型复用与重复查询的处理逻辑
嘿,这个问题问得很到位!我来给你理清楚Laravel里模型复用的核心逻辑:
默认情况下,Laravel不会自动复用已经获取的模型/集合实例。也就是说,如果你在控制器里已经执行过一次User::where('user_id', 42)->first();,之后在事件里又写了一模一样的查询语句,Laravel会发起第二次数据库调用,而不是直接复用之前的模型实例。
为什么会这样?
Laravel的查询构建器每次调用都会生成一个全新的实例,它不会自动记录你之前执行过的查询结果。除非你主动做了缓存或者复用变量的操作,否则每次查询都会走数据库。
两种避免重复查询的方式
- 直接复用变量:如果控制器里已经把查询结果存在变量里,比如:
那后续事件里直接使用// 控制器中获取模型 $user = User::where('user_id', 42)->first();$user这个变量就好,完全不需要再执行一次查询,自然也不会触发新的数据库请求。 - 使用查询缓存:如果你确实需要在不同地方执行相同的查询语句,又不想重复查数据库,可以用Laravel的查询缓存方法
remember(),比如:
这样在60秒内,不管在哪里执行这条查询,都会直接返回缓存里的结果,不会发起新的数据库调用。// 缓存查询结果60秒 $user = User::where('user_id', 42)->remember(60)->first();
简单总结:Laravel不会自动帮你复用查询结果,要么自己存变量复用,要么用缓存机制来避免重复查询。
内容的提问来源于stack exchange,提问作者Frooplet
相关产品推荐
相关产品推荐

