отношение многие ко многим OrderBy - Laravel построитель запросов - PullRequest
1 голос
/ 22 апреля 2020

enter image description here

Я пытаюсь заказать продукты по thp цене в таблице опций, цена может быть в мультивалюте для этого я добавляю dolor_price рассчитывается как код ниже. но результатом была следующая Ошибка
SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'options.dolor_price' в 'предложении заказа'

    $products=Product::with(["options"=> function($option){
        $option->where('name' ,'unique name' );

        $option->selectSub(function ($q) {
            $rateEruToDolor =2;
            $rateAedToDolor =3;
            $q->selectRaw(' IF(currency=0,price * ?, IF(currency=1,price * ?, price))',
            [$rateEruToDolor,$rateAedToDolor]);
        }, 'dolor_price');
    }]);
    $products->orderBy('options.dolor_price');
    dd($products->get()->toArray());

1 Ответ

1 голос
/ 22 апреля 2020

Попробуйте:

$rateEruToDolor =2;
$rateAedToDolor =3;
$products = Product::join('product_options', 'products.id', '=', 'product_options.product_id')
      ->join('options', 'product_options.option_id', '=', 'options.id')
      ->selectRaw('price, currency, IF(currency=0, price * ?, IF(currency=1, price * ?, price)) 
                   as dolor_price', [$rateEruToDolor, $rateAedToDolor]);
$products->orderBy('dolor_price');
dd($products->get()->toArray());

Перечислите все поля в вашей таблице продуктов / опций вместе с price и currency, уже перечисленными в методе selectRaw('xxx, xxx, price, currency, IF ...) выше. Надеюсь, это поможет

...