当前位置: 首页 > 知识库问答 >
问题:

嵌套查询结果的拉拉维尔分页

乐山
2023-03-14

我想创建查询以输出属于一个类别的所有帖子,并带有帖子分页。我确实喜欢这样,但无论如何在输出上,我有简单的照明\数据库\雄辩\没有分页器的帖子集合。怎么做?

在我的模型中,我有关系 一个类别有很多帖子。一个帖子属于一个类别。

    public function getItemWithPostsWithSimplePaginator($slug, $perPage = null)
    {
        $columns = ['id', '_lft', '_rgt', 'parent_id', 'title', 'slug', 'icon', 'description', 'image', 'metatitle', 'metakey', 'metadesc'];

        $postcolumns = ['title','slug','category_id','image','fulltext','created_at'];

        $result = $this
            ->startConditions()
            ->whereSlug($slug)
            ->select($columns)
            ->with(['posts' => function($query) use(&$postcolumns, &$perPage) {
                $query->select($postcolumns)
                      ->wherePublished(true)
                      ->orderBy('created_at', 'ASC')
                      ->simplePaginate($perPage);
                }])
            ->first();

        return $result;
    }

如果我做 dd,我可以在输出集合中看到 11 个帖子,尽管 $perPage = 10 并且属于此类别的帖子总数为 24。所以它部分有效。我唯一想念的是分页对象。

如果我用分页替换简单分页,我可以看到有 10 个帖子的集合,但无论如何没有分器的正常集合。

App\Models\NewsCategory {#838 ▼
  +timestamps: false
  #guarded: []
  #connection: "mysql"
  #table: "news_categories"
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: true
  +wasRecentlyCreated: false
  #attributes: array:12 [▶]
  #original: array:12 [▶]
  #changes: []
  #casts: []
  #classCastCache: []
  #dates: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: array:1 [▼
    "posts" => Illuminate\Database\Eloquent\Collection {#905 ▼
      #items: array:11 [▼
        0 => App\Models\NewsPost {#925 ▶}
        1 => App\Models\NewsPost {#926 ▶}
        2 => App\Models\NewsPost {#927 ▶}
        3 => App\Models\NewsPost {#928 ▶}
        4 => App\Models\NewsPost {#929 ▶}
        5 => App\Models\NewsPost {#930 ▶}
        6 => App\Models\NewsPost {#931 ▶}
        7 => App\Models\NewsPost {#932 ▶}
        8 => App\Models\NewsPost {#933 ▶}
        9 => App\Models\NewsPost {#934 ▶}
        10 => App\Models\NewsPost {#935 ▶}
      ]
    }
  ]
  #touches: []
  #hidden: []
  #visible: []
  #fillable: []
  #pending: null
  #moved: false
}

共有1个答案

蔡楚
2023-03-14

您可以尝试的解决方案之一是使用 setRelation() 方法。

$result = $result->setRelation(
    'posts', 
    YourPostModel::select($postcolumns)
        ->wherePublished(true)
        ->orderBy('created_at', 'ASC')
        ->simplePaginate($perPage)
);
 类似资料:
  • 所以我正在尝试为我的网站实现一个支付解决方案,经过相当多的研究,我仍然缺乏一个完整的解决方案。我正在运行Laravel 5.0,需要一般购物车付款功能。我想我会发布这篇文章,试图创建一个参考,以帮助其他可能有这个问题的人。我已经把测试事务放到了Paypal的沙箱中,这似乎是砖墙的所在,但是一个完整的概述会很有帮助。我将列出我需要克服的问题,以便解决一些问题。 完成支付解决方案实施需要解决的问题 >

  • 我需要关于laravel API的明确信息。 我一直在阅读很多关于 laravel API 的文章。除了在JWT和laravel-passport之间进行选择(这是一个完全不同的混淆程度),我需要获取有关laravelAPI的基本信息,以便让我更清楚地了解什么是什么。 为什么laravel护照需要数据库(这些表的用途是什么) 如果我在authProvider文件中将auth驱动程序更改为passp

  • 我有点困惑于认识到和包之间的差异。它们实际上通过令牌服务于相同的API身份验证目的吗?只要Laravel Pasport是在5.3中引入的,在最新版本中是否应该使用Pasport而不是包?

  • 我正在尝试使用以下代码在laravel中向支付endpoint发出后请求 我收到以下错误: 我在Apache上本地运行我的Laravel应用程序,所以我承认没有SSL运行的事实,但是我怎样才能绕过这个错误呢?在生产中将提供ssl??

  • 拉拉维尔8中的照片没有以html格式显示“替代文本显示”。在Windows文件资源管理器中,我发现每张照片都是一个文件夹,其中包含照片的名称,例如“myphoto.jpg”,此文件夹中有一个“.tmp”文件。目标文件夹是“上传/发布”,当我在浏览器中检查照片时,链接显示正确。这是一张照片的链接示例:“http://localhost/laravel/blog/uploads/posts/16571

  • 我正在使用Laravel创建一个音乐搜索/发现网站。简言之,艺术家们有许多专辑,其中有许多曲目。用户有许多与轨迹关联的标记。标记只能在曲目上进行,而不能在专辑或艺术家上进行。 用户访问网站,并可以搜索一组标签,例如。“快乐”、“派对”、“学校”。将返回轨道列表以及一些其他详细信息。 用户首先对轨迹进行标记。用户应该能够看到他们标记的所有曲目,并且能够根据标记进行搜索/过滤。 使用我目前的设置(见下

  • 是否可以在比1级更深的级别上进行具有雄辩能力的多级关系查询?我的桌子是这样的: post_comments- 发表评论或回复- 使用者- 用户数据- 所以我想问是不是有可能得到一个帖子的评论与所有的回复和用户数据的人谁回答了评论1查询与雄辩。 这就是我的评论模型的样子: 当我得到一条评论的所有用户数据时,我想得到回复者的所有用户数据。我真的很抱歉,如果这个问题已经在其他地方发布或记录,但我似乎无法

  • 我有个急事。我第一次尝试使用Laravel。为此,我使用Wamp。我不知道这是否重要,但我将wamp的DocumentRoot设置在以下地址: 我在一个名为Sites的文件夹中为许多不同的网站使用wamp。当我访问其中一个站点时,我会转到:localhost/Sites/thewebsite。所以我真正想做的就是去掉Laravel网站路径中的公共文件夹。 就目前而言,我做到了: > 更改httpd