Подтвердить что ты не робот

Laravel изменяет данные разбивки на страницы

Вывод pagination моей Laravel похож на временную разбивку laravel, но мне нужно изменить массив данных для каждого объекта. Мой выход:

Вывод

Как вы можете видеть, объект данных имеет 2 элемента, которые мне нужно изменить.

Мой код:

$items = $this->items()
        ->where('position', '=', null)
        ->paginate(15);

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

С этой целью я попытался использовать foreach

foreach ($items->data as $item)
        {

        }

который дает мне ошибку, по какой-то причине я не знаю:

Undefined property: Illuminate\Pagination\LengthAwarePaginator::$data"
status_code: 500

Любая помощь?

4b9b3361

Ответ 1

Элементы paginator - это коллекция. Вы можете взять его и преобразовать данные следующим образом:

$paginator = $this->items()->where('position', '=', null)->paginate(15);
$paginator->getCollection()->transform(function ($value) {
    // Your code here
    return $value;
});

Ответ 2

Если вы хотите, чтобы элементы были разбиты на страницы:

    $itemsPaginated = $this->items()
         ->paginate(15);

    $itemsTransformed = $itemsPaginated
        ->getCollection()
        ->map(function($item) {
            return [
                'id' => $item->id,
            ];
    })->toArray();

    $itemsTransformedAndPaginated = new \Illuminate\Pagination\LengthAwarePaginator(
        $itemsTransformed,
        $itemsPaginated->total(),
        $itemsPaginated->perPage(),
        $itemsPaginated->currentPage(), [
            'path' => \Request::url(),
            'query' => [
                'page' => $itemsPaginated->currentPage()
            ]
        ]
    );

Ответ 3

-Laravel 5.4

// example update column "photo" 
// from "/path/to/photo.png" 
// to "abc.com/path/to/photo.png"
foreach ($items as $item)
{
    $path = $item->photo;

  // Remove 
  $item->offsetUnset("photo");

  // Set
  $item->offsetSet("photo", url($path));
}

Ответ 4

У меня была та же проблема.
Затем я обнаружил Красноватые мутаторы.

Они позволяют вам изменять свои данные при получении или настройке.

В моем примере я хранил HTML как Markdown, затем, когда вы извлекали его в HTML.
Вы включили в свой вопрос очень мало кода, поэтому я предоставлю свою версию для своего конкретного инцидента. Кроме того, код мутатора помещается в модель, а не в контроллер.

use Illuminate\Mail\Markdown;
use Facades\League\HTMLToMarkdown\HtmlConverter as Markup;

class Post extends Model
{
    protected $fillable = [
        'title', 'body'
    ];

    /**
     * Convert to HTML when displaying on the screen.
     */
    public function getBodyAttribute($value)
    {
        return $this->attributes['body'] = Markdown::parse($value);
    }

    /**
     * Convert to Markdown when storing in the database.
     */
    public function setBodyAttribute($value)
    {
        return $this->attributes['body'] = Markup::convert($value);
    }
}

Имена функций должны соответствовать следующим критериям:

  • Начните с get или set в нижнем регистре.
  • Должен быть ваш столбец базы данных в PascalCase (или StudlyCase, поскольку Laravel ссылается на него, хотя я считаю, что его неправильно назвали. См. здесь fooobar.com/questions/500239/...).
  • Наконец, имя функции должно заканчиваться на Attribute с капиталом A.

Ответ 5

Фактически $items является экземпляром Paginator, который вы можете повторить так:

foreach ($items as $item)
{

}

должен работать.

Ответ 6

вы должны использовать ниже код в своем клиенте

{!! $items->render() !!}

Ответ 7

Не обращайте внимания на нумерацию страниц в laravel и попадите в нормальные данные

foreach ($items as $item)
{

}