Laravel预加载with(数据库查询)

之前创建接口时后台查询数据用的是whereIn,漂亮厉害的同事小姐姐告诉我三种方法(with、循环遍历、whereIn),然后我查看了lavarel文档:

with和循环遍历是相对应的:简单来说就是with预加载就是用来解决循环遍历的缺点。

with:为了减少数据查询的次数(解决N+1问题)

一、什么是N+1问题呢

N+1查询问题是指在关系型数据库中,当我们需要获取一个模型及其相关模型的数据时,如果我们使用了循环来遍历每个模型并逐个查询关联数据,就会出现N+1查询问题。

其中的N代表主模型的数量,而1则代表每个主模型需要进行的额外查询。

例如,假设我们有一个文章模型和一个作者模型,每个文章都有一个作者。

如果我们要获取所有的文章,并且对于每篇文章都要获取对应的作者,如果我们使用循环来遍历每篇文章,并对每个文章进行一个额外的查询来获取对应的作者,那么就会出现N+1查询问题。

这个问题的根本原因是在获取关联模型数据时,没有使用适当的预加载方法。

适当的预加载方法可以一次性获取所有关联模型的数据,避免了多次单独查询的情况,提高了查询性能。

解决N+1查询问题的常用方法是使用关联预加载。在关系型数据库中,我们可以使用特定的查询语句或ORM框架提供的方法,如Laravel中的`with`方法来进行关联预加载。

通过这种方式,我们可以在一次查询中获取到主模型及其关联模型的数据,避免了多次单独的查询操作,从而优化了查询性能。

二、用with写的数据查询

在这个地方出现了报错,看图吧

这个地方是找到cx的控制器里面,名字引用错了

除此之外,就是这个办法的恢复软删数据出现了一丢丢小问题

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值