使用 array_merge 进行 Laravel 分页

nay*_*dev 4 php pagination laravel

我有 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);
Run Code Online (Sandbox Code Playgroud)

我怎样才能对这个 $results 进行分页?

Ham*_*eed 6

您可以通过两种方式执行此操作:

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

使用联合

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

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

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

protected $appends = ['type'];

public function getTypeAttribute()
{
    return 'Income';
}
Run Code Online (Sandbox Code Playgroud)

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

protected $appends = ['type'];

public function getTypeAttribute()
{
    return 'Expense';
}
Run Code Online (Sandbox Code Playgroud)

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

  • 但通过这种联合方式,我无法在$收入和$费用中推送/添加新字段“类型”。 (3认同)