Как добавить пользовательские свойства в paginate Laravel JSON Response - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть следующий простой метод индекса:

public function index()
    {
       // dd(Poll::paginate(2));
      return response()->json(Poll::paginate(2),200);
    }

Результат этого метода похож на следующий объект json:

{
"current_page": 1,
"data": [
{
"id": 1,
"title": "I suppose?' said Alice. 'Why, you don't know.",
"created_at": "2018-09-14 16:42:11",
"updated_at": "2018-09-14 16:42:11"
},
{
"id": 2,
"title": "Alice; but she knew that it seemed quite.",
"created_at": "2018-09-14 16:42:11",
"updated_at": "2018-09-14 16:42:11"
}
],
"first_page_url": "http://127.0.0.1:8000/polls?page=1",
"from": 1,
"last_page": 6,
"last_page_url": "http://127.0.0.1:8000/polls?page=6",
"next_page_url": "http://127.0.0.1:8000/polls?page=2",
"path": "http://127.0.0.1:8000/polls",
"per_page": 2,
"prev_page_url": null,
"to": 2,
"total": 11
}

Я хочу добавить другое свойство массива после"total: 11" атрибут, такой как:

,
"anotherData" : [
   "userId": 1,
   "userName": "john10",
   "message": "This is a message"
]

Я попытался понять, как работает response()->json(), поэтому он может извлечь некоторые данные из объекта LengthAwarePaginator, который он является выходнымPoll::paginate(2) из этого ресурса , но я не мог понять, как он может получить массив из LengthAwarePaginator, содержащий результирующие ключи в объекте json?!

1 Ответ

0 голосов
/ 28 сентября 2018

Из рассматриваемого ресурса , указанного выше , метод json() принимает массив и, я думаю, что, если параметр не является массивом, он пытается преобразовать его в массив, особенно если он являетсяобъект похож на LengthAwarePaginator, поэтому он может использовать метод toArray().

Я попытался заменить return response()->json(Poll::paginate(2),200) на return response()->json(Poll::paginate(2)->toArray,200), затем я получил тот же вывод.Поэтому я решил заменить код моего метода индекса следующим образом:

public function index()
{
    //dd(Poll::paginate(2)->toArray());
    $output = Poll::paginate(2)->toArray();
    $output['userData'] = ['userId' => \Auth::user()->id, 'userEmail' => \Auth::user()->email];
    return response()->json($output,200);
}

Результирующий вывод:

...
"path": "http://127.0.0.1:8000/polls",
"per_page": 2,
"prev_page_url": null,
"to": 2,
"total": 11,
"userData": {
"userId": 1,
"userEmail": "lion@example.com"
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...