之前创建接口时后台查询数据用的是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的控制器里面,名字引用错了
除此之外,就是这个办法的恢复软删数据出现了一丢丢小问题