php – Laravel 4.1:如何分享雄辩的渴望关系?

php – Laravel 4.1:如何分享雄辩的渴望关系?,第1张

概述有一个关于老L3渴望加载的分页的问题,没有使用雄辩.但是,我想用雄辩的方式,用分页的方式来加载关系. 主要模式:与职位有一对多关系的主题, 所以一个主题有很多帖子.我使用此功能获取所有数据: public function findById($id){ return $this->topic->with('posts', 'posts.user', 'posts.user.profile 有一个关于老L3渴望加载的分页的问题,没有使用雄辩.但是,我想用雄辩的方式,用分页的方式来加载关系.

主要模式:与职位有一对多关系的主题,
所以一个主题有很多帖子.我使用此功能获取所有数据:

public function findByID($ID){    return $this->topic->with('posts','posts.user','posts.user.profile')                       ->find($ID);}

后来我循环显示所有的结果,但是它们没有分页:

@foreach($topic->posts as $post)... unpaginated content ...@endforeach

所以,我可以做一个解决方法,并单独选择所有具有$ID的主题的帖子,并使用 – > paginate()而不是 – > get(),并将分页$pots,

>但是有可能使用分页的热心关系帖子吗?那怎么办呢?

澄清一些东西:分页热切的关系有点误解.渴望加载的要点是尽可能少的查询检索所有关系.如果要检索10个主题,所有这些主题都有35个帖子,则只需要两个查询.甜!

也就是说,分配一个渴望的关系不会奏效.考虑两种情况:

>您想要检索和列出主题,也许列出每个主题的前五个帖子.大!渴望加载是完美的.现在,你不想在这样的页面上分页热门的帖子,所以没关系.
>您加载一个主题,并且您要分页该主题的帖子.大!比较容易做但是,如果您已经急于加载属于此主题的所有帖子,那么您可能会检索到大量不需要的额外资源.因此,急切的加载实际上是伤害你.

也就是说,有两个潜在的解决方案:

选项1:创建一个分页雄辩关系的自定义访问器.

/** * Paginated posts accessor. Access via $topic->posts_paginated *  * @return \Illuminate\Pagination\Paginator */public function getpostsPaginatedAttribute(){    return $this->posts()->paginate(10);}

优点:分页非常容易;不干涉正常职位关系.
缺点:加载帖子不会影响该访问者;运行它将在加载加载的查询之上创建两个附加查询.

选项2:分页信息由热切关系返回的集合.

/** * Paginated posts accessor. Access via $topic->posts_paginated *  * @return \Illuminate\Pagination\Paginator */public function getpostsPaginatedAttribute(){    $posts = $this->posts;    // Note that you will need to slice the correct array elements yourself.    // The paginator class will not do that for you.    return \Paginator::make($posts,$posts->count(),10);}

优点:使用热切的关系;不会创建其他查询.缺点:不管当前页面(慢),都必须检索所有元素;必须手动构建当前页面元素.

总结

以上是内存溢出为你收集整理的php – Laravel 4.1:如何分享雄辩的渴望关系?全部内容,希望文章能够帮你解决php – Laravel 4.1:如何分享雄辩的渴望关系?所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1254081.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存