【问题标题】:Laravel Pagination with array_merge使用 array_merge 进行 Laravel 分页
【发布时间】:2020-04-21 01:41:25
【问题描述】:

我有 2 个表格,分别命名收入和支出,我想在一个带有 laravel 分页的视图中显示所有数据。为此,我用 array_merge() 合并了两个数组。

$incomes = Income::where('user_id', Auth::User()->id)->get()->toArray();
$expenses = Expense::where('user_id', Auth::User()->id)->get()->toArray();
foreach ($incomes as $key => $value) {
    $incomes[$key]['type'] = 'income';
}

foreach ($expenses as $key => $value) {
    $expenses[$key]['type'] = 'expense';
}

$results = array_merge($incomes, $expenses);

如何为这个 $results 分页?

【问题讨论】:

  • 您想通过分页实现什么目标?仅仅是为了更轻松地浏览一系列收入和支出吗?或者您是否也在尝试优化页面加载时间?
  • 如果你将 Eloquent 查询结果提供给他们的分页器,Laravel 可以为你提供最好的帮助,但它确实允许你创建一个可以处理简单数组的手动分页器。你看过这里吗? laravel.com/docs/6.x/pagination#manually-creating-a-paginator
  • @xyz 是的,我明白了。但基本上我想知道有没有办法使用默认分页而不是手动创建它?

标签: php laravel pagination


【解决方案1】:

您可以通过两种方式做到这一点:

  1. Laravel 内置手动创建分页器功能。
  2. 使用 UNION 从表中获取结果。

使用联合

$incomes = Income::where('user_id', Auth::User()->id);
$data = Expense::where('user_id', Auth::User()->id)->union($incomes)->paginate(10);

手动创建分页器,请看https://laravel.com/docs/6.x/pagination#manually-creating-a-paginator

将以下内容添加到收入模型中

protected $appends = ['type'];

public function getTypeAttribute()
{
    return 'Income';
}

将以下内容添加到费用模型

protected $appends = ['type'];

public function getTypeAttribute()
{
    return 'Expense';
}

这将在查询结果中添加类型键。

【讨论】:

  • 但是这种联合方式我无法在 $incomes 和 $expenses 中推送/添加新字段“类型”。
  • 您可以使用模型上的 appends 属性直接在两个模型中定义类型。请参阅上面的更新答案。
  • 谢谢。它正在工作。
猜你喜欢
  • 2014-09-01
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
相关资源
最近更新 更多