【问题标题】:Laravel pagination using double eager loading使用双重急切加载的 Laravel 分页
【发布时间】:2016-06-23 17:18:19
【问题描述】:

我在我的 ForumController 中使用以下代码:

public function boardIndex($id)
{
    $container = ForumBoard::with([
        'topics' => function($query)
            {
                $query->orderBy('created_at', 'desc');
                $query->paginate(10);
            },
        'children' => function($query)
            {
                $query->orderBy('position', 'asc');
            }
        ])->findOrFail($id);

    return view('forum.board.index', compact('container'));
}

它按预期工作,我可以通过将 ?page=2 附加到 url 的末尾来手动分页,但是如果我想使用 {!! $container->topics->render() !!} 在我的视图中呈现分页器,我会收到以下错误:

ErrorException in Macroable.php line 81:
Method render does not exist. (View: C:\xampp\htdocs\see\resources\views\forum\board\index.blade.php)

编辑:

感谢您的帮助! 这是我最终的工作代码(它甚至只使用了 4 个数据库查询而不是 5 个):

public function boardIndex($id)
{
    $board = ForumBoard::findOrFail($id);
    $topics = $board->topics()->latest()->paginate(11);
    $children = $board->children()->oldest('position')->get();

    return view('forum.board.index', compact('board', 'topics', 'children'));
}

【问题讨论】:

    标签: php laravel pagination laravel-5.2 eager-loading


    【解决方案1】:

    我在任何地方都找不到 Paginator 实例。

    显然,当您在闭包内进行分页时,只存储分页结果。

    我想出了一个在我看来并不优雅但可能会有所帮助的解决方案:

    <?php
    public function index()
    {
        $descendantPaginator = null;
        $user = User::with([
            'descendants' => function ($query) use (&$descendantPaginator) {
                $query->orderBy('created_at', 'DESC');
                $descendantPaginator = $query->paginate(10);
            }
        ])->findOrFail(1);
    
        return view('home.index', compact('user', 'descendantPaginator'));
    }
    

    在你看来:

    {!! $descendantPaginator->links() !!}
    

    我推荐以下策略:

    <?php
    public function index()
    {
        $user = User::findOrFail(1);
        $descendants = $user->descendants()->latest()->paginate(10);
        return view('home.index', compact('user', 'descendants'));
    }
    

    那么在你看来:

    {!! $descendants->links() !!}
    

    【讨论】:

      猜你喜欢
      • 2021-09-10
      • 2021-09-29
      • 2023-04-03
      • 2016-07-04
      • 2019-07-06
      • 2011-06-15
      • 2011-05-23
      • 2014-08-13
      • 2021-04-23
      相关资源
      最近更新 更多