【问题标题】:Multiple Eager Loading With Pagination in laravel在 laravel 中使用分页进行多次急切加载
【发布时间】:2019-07-06 22:08:30
【问题描述】:

我想返回预先加载的关系的分页数据,以便我可以在我的视图模板中使用分页显示它们

public function show(Group $group)
{
    $data = ['members', 'assets', 'liabilities', 'loans','shares'];

    $group = $group->load($data);

    return view('admin.groups.show', compact('group'));
}

这是我的小组模型

<?php

namespace App;

class Group extends BaseModel
{   
    use Enumable;

    public function constitution()
    {
        return $this->hasOne(Constitution::class);
    }

    public function members()
    {
        return $this->hasMany(Member::class);
    }


    public function assets()
    {
        return $this->hasManyThrough(Asset::class, Meeting::class)
        ->orderByDesc('meeting_id')
        ->orderBy('member_id');
    }

    public function loans()
    {
        return $this->hasManyThrough(Loan::class, Member::class)
        ->orderByDesc('meeting_id')
        ->orderBy('member_id');
    }

    public function shares()
    {
        return $this->hasManyThrough(Share::class, Member::class)
        ->orderByDesc('meeting_id')
        ->orderBy('member_id');
    }

    public function liabilities()
    {
        return $this->hasOne(Liability::class)->latest();
    }
}

我需要对 $data 数组进行分页

【问题讨论】:

  • 显示您的 Group 模型(及其加载功能)
  • 那是一个关系,现在我有多个关系,我必须急切地加载它们@JonasStaudenmeir
  • 解决方法是一样的。您遍历$data 并为每个关系调用setRelation()
  • 你能给我举个例子吗,我已经试过了,不乏@JonasStaudenmeir

标签: laravel eloquent eager-loading


【解决方案1】:

使用setRelations():

public function show(Group $group)
{
    $group->setRelations([
        'members', $group->members()->paginate(5),
        'assets', $group->assets()->paginate(5),
        'liability', $group->liability()->paginate(5),
        'loans', $group->loans()->paginate(5)
    ]);

    return view('admin.groups.show', compact('group'));
}

【讨论】:

    猜你喜欢
    • 2016-07-04
    • 2021-09-29
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 2023-04-03
    • 2018-02-20
    • 1970-01-01
    相关资源
    最近更新 更多