PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了渴望加载深层嵌套的关系?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_0@我有一系列与此相关的表格;

@H_502_0@

Trainers -> hasmany -> programs
programs -> hasmany -> weeks
weeks -> hasmany -> days
days -> hasmany -> sessions
sessions -> hasmany -> phases
phases -> hasmany -> excersises
@H_502_0@相反方向的关系都对运动阶段有一个接受,这也有很多

@H_502_0@按照文档将这种关系深化很显然很正常

@H_502_0@

$programs = $this->program->orderBy('TrainerId', 'asc')->take(1)->with('weeks.days')->get();
@H_502_0@我需要能够检索整个程序的内容,并且我认为我可以急于加载每个嵌套关系,如下所示:

@H_502_0@

$programs = $this->program->orderBy('TrainerId', 'asc')->take(1)->with('weeks.days', 'weeks.days.sessions')->get();
@H_502_0@要么

@H_502_0@

$programs = $this->program->orderBy('TrainerId', 'asc')->take(1)->with('weeks.days.sessions')->get();
@H_502_0@但都返回FatalErrorException

@H_502_0@

@H_502_0@正确的方法是什么?

解决方法:

@H_502_0@从您的问题中,我可以看到您具有如下的嵌套关系.

@H_502_0@

programs -> hasmany -> weeks
-----------------------------weeks -> hasmany -> days
----------------------------------------------------days -> hasmany -> sessions
@H_502_0@如果我们不知道几周,那么很难知道几天应该加载什么数据.对于会话也是如此.因此,我们必须先加载星期数据,然后再加载几天,然后再加载会话.

@H_502_0@从Laravel文档中,我们可以看到,使用以下方法渴望加载:

@H_502_0@

SELEct * from books

select * from authors where id in (1, 2, 3, 4, 5, ...)
@H_502_0@Laravel根据书籍数据加载作者数据.

@H_502_0@http://laravel.com/docs/eloquent#eager-loading

@H_502_0@尝试先加载几周

@H_502_0@

$programs = $this->program->orderBy('TrainerId', 'asc')
   ->take(1)
   ->with('weeks', 'weeks.days', 'weeks.days.sessions')
   ->get();
@H_502_0@要么:

@H_502_0@懒惰渴望加载:

@H_502_0@

 $programs = $this->program->orderBy('TrainerId', 'asc')->take(1)->get();

 $programs->load('weeks', 'weeks.days', 'weeks.days.sessions');

大佬总结

以上是大佬教程为你收集整理的渴望加载深层嵌套的关系?全部内容,希望文章能够帮你解决渴望加载深层嵌套的关系?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: