Laravel Eloquent Order от CoalescePhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Laravel Eloquent Order от Coalesce

Сообщение Anonymous »

У меня возникли проблемы с использованием объединения внутри orderby для заказа двух столбцов отношений. Вот код, о котором идет речь:

Код: Выделить всё

$productList = Product::select(
'ItemName'
,'ItemCode'
,'QryGroup64'
,'U_SDB_Image_File'
)->active();

if ($this->search) {
$productList = $productList->where('ItemName',  'LIKE', '%'. str_replace(" ", "%", $this->search) . '%');
}

if ($this->category) {
$productList = $productList->where('U_SDB_SALES_GROUP', $this->category);
}

// Handle the order by. It is done like this because of the pagination
if ($this->orderBy == 'ItemNameASC') {
$productList = $productList->with('customerSpecialPrice', 'bandAPrice', 'itemStock', 'itemsPurchased8Weeks')
->orderBy('ItemName');
} elseif ($this->orderBy == 'ItemNameDESC') {
$productList = $productList->with('customerSpecialPrice', 'bandAPrice', 'itemStock', 'itemsPurchased8Weeks')
->orderBy('ItemName', 'desc');
} elseif ($this->orderBy == 'PriceASC') {
$productList = $productList->with('itemStock', 'itemsPurchased8Weeks')
->withAggregate('bandAPrice', 'Price')
->withAggregate('customerSpecialPrice', 'Price')
->orderByRaw("COALESCE(customer_special_price_price,  band_a_price_price)");
}

$productList = $productList->paginate($this->perPage);
Это для просмотра товаров. У каждого товара есть цена группы A (цена распродажи по умолчанию). Есть еще одна таблица, в которой указаны наши котируемые продукты, что означает, что не всегда существует специальная цена для каждого товара.
Теперь, если я это сделаю:

Код: Выделить всё

->orderBy("customer_special_price_price");
, в некоторой степени это работает. Все специальные цены указаны по порядку, но находятся в конце списка (поскольку сначала выбирается ноль). Вот почему я хочу использовать COALESCE.
Ошибки, которые я получил:
При попытке: ->orderByRaw("COALESCE(customer_special_price_price,band_a_price_price)");, он выдает ошибку. Недопустимое имя столбца «customer_special_price_price».
Ниже приведен запрос, который он пытается выполнить, когда показывает эту ошибку:

Код: Выделить всё

select
top 20 [ ItemName ],
[ ItemCode ],
[ QryGroup64 ],
[ U_SDB_Image_File ],
(
select
top 1 Price
from
[ ITM1 ]
where
[ OITM ].[ ItemCode ] = [ ITM1 ].[ ItemCode ]
and [ PriceList ] = 25
) as [ band_a_price_price ],
(
select
top 1 Price
from
[ OSPP ]
where
[ OITM ].[ ItemCode ] = [ OSPP ].[ ItemCode ]
and [ CardCode ] = CF000097 - F
) as [ customer_special_price_price ]
from
[ OITM ]
where
SellItem = 'Y'
AND (
QryGroup64 = 'N'
OR OnHand > 0
)
and [ ItemName ] LIKE % carling %
order by
COALESCE(customer_special_price_price, band_a_price_price)
Почему orderBy выбирает столбец, созданный с помощью withAggregate, а orderByRaw — нет?


Подробнее здесь: https://stackoverflow.com/questions/790 ... y-coalesce
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»