Как использовать производные столбцы в запросе Laravel DB - PullRequest
0 голосов
/ 18 сентября 2018

У меня небольшая проблема с запросом, который я пытаюсь настроить в своем приложении Laravel.Я пытаюсь вычислить что-то на уровне базы данных, а затем вернуть его пользователю с помощью вызова ajax.

Вот часть вызываемой функции:

$query = \DB::table('db_table');

    switch ($request['type']) {
        case 'type1':
            $settingValue = $request['type1'];
            $query = $query->selectRaw('price - cost_price AS margin');
            $query = $query->havingRaw('margin < ?', [$settingValue]);

            break;

        case 'type2':
            $settingValue = $request['type2'];
            $query = $this->addSelectQuery($query, '((price - cost_price) / price) AS profit');
            $query = $query->havingRaw('profit < ?', [$settingValue]);

            break;

        default: 
            return false;
    }

    $filteredProducts = $query->where('id', '=', $id)->count();

У меня естьуже пробовал где, гдеRaw и имея, но я продолжаю получать ту же ошибку.

Illuminate\Database\QueryException:
SQLSTATE[42703]: Undefined column: 7 ERROR:  column "margin" does not exist
(SQL: select count(*) as aggregate from "db_table" where "id" = 21 having margin < 15)

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Проблема в том, что вы используете метод count (), который не будет использовать ваш selectRaw.

Вместо этого добавьте счетчик к вашему выбору, а затем получите счет с помощью value (), что-то вроде:

 $query->selectRaw('count(*) as count, price - cost_price AS margin')
       ->havingRaw('margin < ?', [$settingValue])
       ->value('count');
0 голосов
/ 18 сентября 2018

Вы должны вычислить значения в предложении WHERE:

case 'type1':
    $settingValue = $request['type1'];
    $query->whereRaw('price - cost_price < ?', [$settingValue]);
    break;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...