Laravel 4.1:如何对雄辩的渴望关系进行分页?

2023-12-27

存在关于旧的 L3 急切加载分页的问题,而不是使用 eloquent。但我想使用雄辩来获得与分页的热切加载关系。

主要型号:Topic与有一对多关系Posts, 所以那个Topic有很多Posts。我用这个函数获取所有数据:

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,

  1. 但是否有可能使用急切加载的关系posts那是分页的吗?怎样才能做到呢?

澄清一下:对热切加载的关系进行分页在某种程度上是一种误解。预先加载的目的是在尽可能少的查询中检索所有关系。如果您想检索 10 个主题,其中所有主题都有 35 个帖子,则只需要两个查询。甜的!

也就是说,对急切的关系进行分页是行不通的。考虑发生急切加载时的两种情况:

  1. 您想要检索并列出主题,并且可能列出每个主题的前五个帖子。伟大的!预加载是完美的。现在,您不想在这样的页面上对急切加载的帖子进行分页,所以这并不重要。

  2. 您加载一个主题,并且想要对该主题的帖子进行分页。伟大的!比较容易做到。但是,如果您已经急切加载all属于该主题的帖子,您可能只是检索到了许多您不需要的额外资源。因此急切加载实际上是hurting you.

那就是说,有两种可能的解决方案:

选项 1:创建一个对 Eloquent 关系进行分页的自定义访问器。

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

优点:分页非常容易;不影响正常的帖子关系。
缺点:急切加载帖子不会影响此访问器;运行它将在急切加载的查询之上创建两个附加查询。

选项 2:对急切加载关系返回的 posts 集合进行分页。

/**
 * 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);
}

优点:使用急切加载关系;不创建额外的查询。
缺点:无论当前页面如何,都必须检索所有元素(慢);必须手动构建当前页面元素。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel 4.1:如何对雄辩的渴望关系进行分页? 的相关文章

  • 简单的 PHP 条件帮助: if($Var1 = in list($List) and $Cond2) - 这可能吗?

    这是一个可能的功能吗 我需要检查一个变量是否存在于我需要检查的变量列表中 并且 cond2 是否为 true 例如 if row name 1 2 3 Cond2 doThis 它对我不起作用 我在复制粘贴中更改的只是我的列表和变量名称 i
  • 如何解压 PHP/Lumen/Laravel 的 gzip 请求?

    我收到来自第三方的 gzip 编码文本请求 1mb 所以这是有道理的 我的测试路线 router gt post testgzip function Illuminate Http Request request decompressed
  • 在 php 中为类自动生成 getter 和 setter 的最佳方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我经常创建一个包含一些私有变量的类 当设置此类的实例时 应该可以使用 getter 和 setter 填充该类的所有变量 有没有一种简单的方法可
  • PHP MySQL 使用选项/选择 HTML 表单标签进行多重搜索查询

    我正在尝试使用两个搜索字段设置基本的 MySQL LIKE 搜索 我不想拥有它 所以它有多个可选搜索字段 例如if isset POST city isset POST name 我不知道如何用 HTML 来做到这一点
  • 生成大随机数 php [重复]

    这个问题在这里已经有答案了 我想使用 PHP 生成一个包含 75 个字符的数字 我到处寻找 但一无所获 除了这个 http dailycoding com tools RandomNumber aspx http dailycoding c
  • 学说迁移后备

    我们正在使用原则迁移 当迁移包含多个操作并且其中一个操作失败时 通常会出现问题 例如 如果迁移添加了 5 个外键 其中第 5 个失败 而字段长度不同 则修复字段错误并重新生成迁移不会not修复整个问题 而现在出现一个与 4 个密钥已存在有关
  • “使用未定义常量”注意,但该常量应该被定义

    共有三个文件 common php controller php 和 user php 文件 common php 如下所示 文件controller php看起来像 文件 user php 如下所示 执行脚本时 会给出通知 注意 使用未定
  • PHP 在输入流中使用 fwrite 和 fread

    我正在寻找将 PHP 输入流的内容写入磁盘的最有效方法 而不使用授予 PHP 脚本的大量内存 例如 如果可以上传的最大文件大小为 1 GB 但 PHP 只有 32 MB 内存 define MAX FILE LEN 1073741824 1
  • 在 PHP 中撤销 Google 访问令牌

    正如标题所示 我想以编程方式撤销授予的访问令牌 即在 PHP 中 我发现这个他们的网站 https developers google com identity protocols OAuth2WebServer tokenrevoke 但
  • PHP 脚本可以在终端中运行,但不能在浏览器中运行

    我正在尝试执行exec命令 但我遇到了问题 当我运行以下代码时 当我通过浏览器运行它时它不起作用 但如果我把输出 str将其复制并粘贴到终端中 它工作得很好 造成这种情况的原因是什么 我该如何解决 目前我正在运行localhost php
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • 随机组合 MySQL 数据库中的两个单词

    我有一个包含名词和形容词的数据库 例如 id type word 1 noun apple 2 noun ball 3 adj clammy 4 noun keyboard 5 adj bloody ect 我想创建一个查询 它将抓取 10
  • jQuery Mobile 表单验证

    我有一个移动网站 除了验证之外一切都工作正常 基本上我希望从用户那里获取值 然后在单独的页面 process php 上处理它们 但是 在这样做之前 我需要检查以确保字段已填充 我已经研究了几种方法来做到这一点 但似乎没有一种有效 我现在有
  • PHP 中只保留数组的前 N ​​个元素? [复制]

    这个问题在这里已经有答案了 有没有办法只保留数组的前 N 个 例如 10 个 元素 我知道有array pop 但是有没有更好 更优雅的方法呢 您可以使用array slice http php net array slice or arr
  • SQL 最近日期

    我需要在 php 中获取诸如 2010 04 27 之类的日期作为字符串 并在表中找到最近的 5 个日期 表中的日期保存为日期类型 您可以使用DATEDIFF http dev mysql com doc refman 5 1 en dat
  • 如果循环中内存超出,我可以在 for 循环中抛出异常吗?

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何处理 foreach 循环中发生
  • 表单提交后如何保留选择字段中的选定值?

    我有一个用于将票证上传到数据库的主页 我有一个选择字段 我想保留用户在提交表单之前选择的值 但它没有发生 这是我选择字段的代码
  • Doctrine EntityManager 清除嵌套实体中的方法

    我想用学说批量插入处理 http doctrine orm readthedocs org en latest reference batch processing html为了优化大量实体的插入 问题出在 Clear 方法上 它表示此方法
  • 内部 while 循环不工作

    这是我项目网页上的代码片段 这里我想显示用户选择的类别 然后想显示属于该类别的主题 在那里 用户可以拥有多个类别 这没有问题 我可以在第一个 while 循环中打印所有这些类别 问题是当我尝试打印主题时 结果只显示一行 但每个类别中有更多主
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • g++ 不生成任何文件或给出任何输出

    我刚刚开始使用 g 从网站下载了最新版本 并且制作了一个简单的 HelloWorld 程序 include
  • 如何合并两个sql查询?

    我有一个库存表 我想创建一个报告来显示订购商品的频率 库存 表 item id pcs operation apples 100 order oranges 50 order apples 100 delivery pears 100 or
  • Haskell中的floor和truncate有区别吗

    两者之间的功能是否存在差异floor and truncate在哈斯克尔 它们似乎执行相同的功能并且具有相同的类型签名 truncate Integral b RealFrac a gt a gt b floor Integral b Re
  • vuetify v-data-table 样式

    默认情况下 在 v data table 的每个非最后子行之间打印一行 我想修改 css 来更改该行 例如去掉它 最初 在开发人员控制台中 有关 border bottom 的 css 如下所示 theme light v table tb
  • 如何更改wpf TabControl中TabItem的顺序

    我需要更改 TabItem 的顺序 我尝试过删除 插入 但不起作用 void UserControl Loaded object sender RoutedEventArgs e if condition TabControl Items
  • mmap 是否与所有进程共享内存?

    当我这样做时 myProgram h myProgram c struct PipeShm all my fields more struct PipeShm myPipe initialization for all fields str
  • 检测何时创建新的托管线程

    有谁知道是否可以检测在托管环境中何时创建新线程 我想要一个应用程序中所有线程的列表 每个线程的 ID 和名称 我在 Visual Studio 中使用并发可视化工具 它仅显示线程 ID 而不是线程名称 如果您有 20 多个没有名称的线程 则
  • Auth::validate 返回 false Laravel 8

    好吧 我正在尝试使用 Auth validate credenciais 通过 Laravel 进行身份验证它不起作用 public function LoginData Request request request gt validat
  • :force => true 在模式文件中意味着什么

    如果你查看 db schema rb 你会看到类似的内容 create table users force gt true do t 什么是 force gt true mean 来自Rails 文档 http api rubyonrail
  • 计算用箭头和鼠标移动的对象

    我正在使用 openGL 做一个 Maya 模拟器应用程序 一切进展顺利 只有一个麻烦 我无法计算出通过鼠标移动物体的 100 准确度 我使用 3D 坐标中的箭头和屏幕坐标中的箭头的缩放 并将其乘以一些缩放来计算屏幕坐标的 x 和 y 方向
  • TensorFlow 嵌入查找

    我正在尝试学习如何使用 TensorFlow 构建用于语音识别的 RNN 首先 我想尝试 TensorFlow 页面上提供的一些示例模型TF RNN https www tensorflow org versions master tuto
  • 如何为 Chrome 上的每个选项卡获取不同的徽章值?

    我正在尝试做像 adblock 那样的事情 Adblock 计算 广告 的数量并更新徽章值 目前 我尝试对 背景页面 执行某些操作 但它们仅运行一次 并且所有选项卡的徽章值都相同 我无法使用浏览器操作 popup html 因为它仅在单击后
  • 在与其他线串的交叉点处匀称分割线串

    我有一组与其他 LineString 相交的 LineString 我想在这些交叉点将 LineString 分割成单独的线段 我有一个解决方案 但我认为这不是最好的方法 假设我们正在处理一个 LineString gt gt gt imp
  • 基于滚动位置的 div 位置

    我希望我的徽标根据网站上的滚动位置垂直上下滚动 就像默认滚动条指示您在网站上的位置一样 我希望我的徽标也能这样做 当您位于网站页面的顶部时 徽标位于顶部 而当您位于底部时 徽标将位于页面底部的垂直栏中 位于网页左侧 我不知道如何解决这个问题
  • Curl_exec 在 php 中返回 null

    我在使用curl操作获取数据时遇到问题 在这里我隐藏了令牌 如果我仅在浏览器中使用网址 那么它会返回数据 但这里它为空
  • 根据条件收集变量 (R)

    我正在阅读 R for Data Science 一书 并希望根据条件 类似于选择 从数据集中 收集 多个变量 具体来说 我想只选择连续变量而不是分类变量 如何在不手动指定变量的情况下完成此任务 下面不行 library tidyverse
  • node.js 将 http 响应写入流

    我正在通过 http 获取一些二进制数据 我的代码如下所示 var writeStream fs createWriteStream fileName request url function err res res socket pipe
  • Gecko(或任何其他布局引擎)如何呈现文档/页面?

    浏览 Gecko 的文档来了解它如何呈现网页有点困难 我正在对主要浏览器上的项目进行一些性能分析 以了解如何提高响应时间 我知道那里有优化技术 但我并不真正理解它们的基础 我相信如果我知道浏览器引擎如何做它们的事情 这个问题就会得到解决 我
  • 如何在角度应用程序中对 router.navigate 进行单元测试 [重复]

    这个问题在这里已经有答案了 我正在为角度应用程序运行单元测试 我想对导航在角度应用程序中是否正常工作进行单元测试 if this customer length 0 this router navigate nocustomer 以及这个的
  • Laravel 4.1:如何对雄辩的渴望关系进行分页?

    存在关于旧的 L3 急切加载分页的问题 而不是使用 eloquent 但我想使用雄辩来获得与分页的热切加载关系 主要型号 Topic与有一对多关系Posts 所以那个Topic有很多Posts 我用这个函数获取所有数据 public fun