Добавить данные в коллекцию перед нумерацией страниц в Laravel - PullRequest
0 голосов
/ 18 июня 2019

Я получаю некоторые данные из базы данных и делаю пагинацию следующим вызовом:

$itemsList = DB::Table('items')->paginate(10);

Каждый элемент данных имеет дату истечения срока действия, с которой я вычисляю количество оставшихся дней и возвращаю в виде массива с функцией, которую я написал. Мне нужно как-то интегрировать этот массив в вызов нумерации страниц, чтобы на каждой странице отображалось правильное значение оставшихся дней. На данный момент у меня в файле блейда есть что-то вроде этого:

<?php
$i = 0;
?>
@foreach ($itemsList as $item)
    <tr>
        <td>{{ $item->item_name }}</td>
        <td>{{ $item->item_user }}</td>
        <td>{{$left_days[$i++]}}</td>

При использовании этого метода первая страница нумерации страниц работает нормально, а массив left_days ссылается на правильный элемент в списке. Однако на других страницах значения left_days относятся к элементам первой страницы, поскольку значение i начинается с 0 при каждом запуске.

Я думаю, что мне нужно добавить массив left_days в коллекцию перед вызовом разбиения на страницы, но я не смог понять, как это сделать.

Чтобы быть более точным, ниже приведен результат dd в $ itemList:

LengthAwarePaginator {#292 ▼
  #total: 94
  #lastPage: 10
  #items: Collection {#277 ▼
    #items: array:10 [▼
      0 => {#276 ▼
        +"id": 1
        +"item_name": "sadasd"
        +"item_user": "sadas"
        +"expiry_date": "2019-06-26"
        +"last_modified_by": "someone"
        +"created_at": "2019-06-18 15:19:33"
        +"updated_at": "2019-06-18 15:19:33"
      }
      1 => {#270 ▶}
      2 => {#279 ▶}
      3 => {#280 ▶}
      4 => {#281 ▶}
      5 => {#282 ▶}
      6 => {#283 ▶}
      7 => {#284 ▶}
      8 => {#285 ▶}
      9 => {#286 ▶}
    ]
  }
  #perPage: 10
  #currentPage: 1
  #path: "http://localhost:8000/licenses"
  #query: []
  #fragment: null
  #pageName: "page"
  +onEachSide: 3
  #options: array:2 [▶]
}

Мне кажется, мне нужен способ вставки массива в правильные места, чтобы у каждого элемента в коллекции также было поле left_days, которое рассчитывается до нумерации страниц.

1 Ответ

0 голосов
/ 18 июня 2019

Ответ, данный Роландом Старком и Тимом Льюисом:

Используйте:

Item::paginate(10);

вместо:

DB::Table('items')->paginate(10);'

и напишите в модели функцию get, напримерэто:

public function getLeftDaysAttribute(){
     calculations...
    return value;
}

После чего я могу просто вызвать в файле блейда значение left_days:

 $item->left_days
...