как разбить на страницы после сортировки в laravel - PullRequest
1 голос
/ 16 января 2020

У меня есть модель Food. Каждое блюдо имеет цену и скидку (в процентах). Я добавил атрибут стоимости для хранения значения, которое рассчитывается на основе первой цены и скидки.

Пример :
У нас есть еда с ценой 10 $. скидка 10%, поэтому стоимость 9 $.

class Food extends Model
{
    protected $appends = ['cost'];

    public function getCostAttribute()
    {
        return $this->price - round( ($this->price*$this->discount) / 100 );
    }

}

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

$foods = Food::all();
$foods = $foods->sortBy(function($food){
    return $food->cost;
});

Теперь, как я могу разбить на переменные $foods? Потому что я не могу выполнить следующий код для разбивки на страницы

$foods = $foods->paginate(12);

Ответы [ 3 ]

5 голосов
/ 16 января 2020

sort by уже взял данные из базы данных, поэтому использование пагинации не очень полезно.

Поэтому я рекомендую изменить ваш код следующим образом, это уменьшит стоимость ввода-вывода:

Food::select('*', 
             DB::raw('(price - round((price * discount) / 100)) AS cost')
            )->orderBy('cost')
             ->paginate(12)
0 голосов
/ 16 января 2020

Вы должны использовать объединение, чтобы отсортировать свою базу данных по модели отношений. Попробуйте это

$order = 'desc';
$users = Food::join('costs', 'foods.id', '=', 'costs.id')->orderBy('costs.id', 
$order)->select('foods.*')->paginate(10);

ссылка: [https://laracasts.com/discuss/channels/eloquent/order-by-on-relationship] [1]

0 голосов
/ 16 января 2020

Попробуйте

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