нельзя использовать paginate при использовании sortby в Laravel - PullRequest
2 голосов
/ 13 января 2020

Я хочу получить продукты и отсортировать их по mutator attribute, в моем случае это называется price

Я ищу способ сортировки и обнаружил, что могу использовать sortBy из collection

вот так

private function search()
{   
    return Product::with(['firstImage', 'category'])
        ->sortBy('price');
}

работает нормально, но когда я пытаюсь добавить paginate ничего не происходит и в ответе нет пагината

private function search()
{   
    return Product::with(['firstImage', 'category'])
        ->paginate(9)->sortBy('price');

}

Так как я могу добавить paginate в этом случае?

Редактировать

price мутатор

public function getPriceAttribute()
{
    return $this->sell_price - (($this->discount * $this->sell_price) / 100);
}

Ответы [ 2 ]

1 голос
/ 13 января 2020

К сожалению, нет возможности позвонить paginate() при сборе. Вы можете вручную разбить на страницы результат сбора или изменить свой запрос и использовать addSelect или orderByRaw для включения измененного значения:

use Illuminate\Support\Facades\DB;

Product::select('*', DB::raw('(sell_price - ((discount * sell_price) / 100)) AS price'))
        ->orderBy('price')
        ->paginate(9);

Кстати, я думаю, вы получите тот же результат для заказа по sell_price столбец вместо price измененное значение, если ваша скидка является постоянной величиной, поэтому попробуйте orderBy('sell_price') вместо sortBy('price'):

Product::with(['firstImage', 'category'])
        ->orderBy('sell_price')
        ->paginate(9);

Laravel Документы: https://laravel.com/docs/master/queries#ordering -grouping предел-и смещения

1 голос
/ 13 января 2020

Вы должны использовать paginate(9) после sortBy() функции. Поэтому вы должны отредактировать второй код следующим образом:

private function search()
{   
    return Product::with(['firstImage', 'category'])
        ->sortBy('price')->paginate(9);

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...