【问题标题】:Laravel pagination append data in one variable and other in another variableLaravel 分页将数据附加到一个变量中,将其他数据附加到另一个变量中
【发布时间】:2018-12-08 11:25:44
【问题描述】:

我在 laravel 分页中遇到问题。在 laravel 中,当我调用 paginate() 方法时,它会返回

{
   "total": 50,
   "per_page": 15,
   "current_page": 1,
   "last_page": 4,
   "first_page_url": "http://laravel.app?page=1",
   "last_page_url": "http://laravel.app?page=4",
   "next_page_url": "http://laravel.app?page=2",
   "prev_page_url": null,
   "path": "http://laravel.app",
   "from": 1,
   "to": 15,
   "data":[
        {
            // Result Object
        },
        {
            // Result Object
        }
   ]
}

这种类型的对象。我想要的是我想在一个变量中设置数据,例如$a,除了$b中的所有其他值。

但是当我在我的分页变量中添加appends('data') 时,它无法正常工作。谷歌搜索后我没有找到解决方案。请帮我解决这个问题。

这是用户模型

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Support\Facades\Auth;
use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Authenticatable {

    use Notifiable;

    use SoftDeletes;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password', 'status', 'role_id',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

我的控制器代码是

public function index() {

        $users = User::where('status', 1)->paginate(10);

return response()->json(
            [
                'error' => 0,
                'errorMsg' => '',
                'data' => [
                    'users' => $users->appends('data')->toArray(),
                ],
            ]
        );
}

我试过这段代码

return response()->json(
                [
                    'error' => 0,
                    'errorMsg' => '',
                    'data' => [
                        'users' => $users->only($user['data'])->toArray(),
                        'users_pagination' => $users->except($user['data'])->toArray(),
                    ],
                ]
            );

在此用户可以正常工作,但 users_pagination 不能正常工作。在两个用户中,users_pagination 返回相同的值

【问题讨论】:

  • 您需要显示您的数据库/模型查询代码。
  • @Gabriel 我只是更新我的问题。请看一下
  • 我想看看你的控制器是如何编写附加代码的。
  • @Gabriel 更新我的问题。请看一下
  • @zayedhassan 我已添加答案,请检查一次

标签: php mysql laravel pagination


【解决方案1】:

试试这个

    $paginateData = User::where('status', 1)->paginate(10);

    $arrPaginateData = $paginateData->toArray();

    $users = $arrPaginateData['data'];

    unset($arrPaginateData['data']); //remove data from paginate array

    $pageInfo =  $arrPaginateData;

返回响应

    return response()->json(
        [
            'error' => 0,
            'errorMsg' => '',
            'data' => [
                'users' => $users,
                'users_pagination' => $pageInfo
            ],
        ]
    );

【讨论】:

  • 我看到你更新的问题,试试我的回答应该符合你的要求
【解决方案2】:

为什么不尝试迭代对象呢?下面的代码会将用户特定的数据附加到每个用户中。

public function index() {
  $users = User::where('status', 1)->paginate(10);
  foreach($users as $users){
    $users->data = 'your data here';
  }

  return response()->json([
      'error' => 0,
      'errorMsg' => '',
      'data' => [
        'users' => $users,
      ],
    ]
  );
}

如果您想使用 Laravel 附加功能,您必须按照 document 进行操作。

【讨论】:

  • 我不想多次迭代我的对象。而且我还想把 current_page、last_page 放到另一个变量中。不只迭代值
  • 您必须使用模型和关系才能使用 appends() 函数。检查我在答案中附加的文件。
猜你喜欢
  • 1970-01-01
  • 2019-11-23
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 1970-01-01
  • 2021-05-21
  • 2021-02-15
  • 2014-10-11
相关资源
最近更新 更多