Порядок по высочайшей степени - PullRequest
0 голосов
/ 23 января 2020

У меня есть две таблицы. У частей есть много предложений.

Мне нужно, чтобы все части были отсортированы по наибольшей цене или количеству предложений, где цена предложения> 0 и количество предложений> 0.

Цена и количество рассчитываются в полях.

Как этого добиться?

Я пытался

Part::
addSelect([
  'quantity' => Offer::select('quantity')
    ->orderBy('quantity', 'desc')
    ->whereColumn('part_id', 'parts.id')
    ->limit(1)
])
->orderBy('quantity', 'desc')
->paginate(3)

Но таким образом я не могу фильтровать детали по количеству> 0 и цене> 0

Также так как количество вычисляется в поле, когда я делаю это

->addSelect([
    'qty' => Offer::select(['quantity * 2 as qty'])
        ->orderBy('qty', 'asc')
        ->whereColumn('part_id', 'parts.id')
        ->limit(1)
])

Я получаю ссылку 'Кол-во' не поддерживается ошибка

Дополнительные пояснения:

Каждая часть имеет много предложений. Каждое предложение имеет много отгрузок. Предложения

available_quantity = quantity - sum of shipped quantities

Мне нужно показать детали, где available_quantity> 0, и отсортировать запчасти по available_quantity

1 Ответ

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

Вы можете заказать его так:

$shipping = Shipping::groupBy('offer_id')->select(DB::raw('SUM(quantity) AS sum_quantity'), 'offer_id', 'id');

Part::join('offers', 'offers.part_id', '=', 'parts.id')
    ->join(DB::raw("({$shipping->toSql()}) AS ship"), 'ship.offer_id', '=', 'offers.id')
    ->select('parts.*',DB::raw('MAX(offers.quantity - ship.sum_quantity) AS avaliable_quantity'))
    ->groupBy('part.id')
    ->orderBy('avaliable_quantity', 'desc')
    ->paginate(3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...