database - 如何在 Laravel 数据库查询中使用派生列

标签 database laravel postgresql laravel-5

我在尝试在 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();

我已经尝试过 where、whereRaw 和 having,但我总是遇到同样的错误。

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)

我们将不胜感激。

最佳答案

您必须计算 WHERE 子句中的值:

case 'type1':
    $settingValue = $request['type1'];
    $query->whereRaw('price - cost_price < ?', [$settingValue]);
    break;

关于database - 如何在 Laravel 数据库查询中使用派生列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52388020/

相关文章:

java - @BatchSize 是聪明还是愚蠢的使用?

windows - 如何每天自动备份postgresql数据库?

sql - 在查询中按参数匹配计数搜索排序?数据库

database - ip2location 查询超过一百万条记录

不需要 XML 配置的 Java 数据库 API

php - Laravel Firebase 手机号码 (OTP) 身份验证

mysql - 如何在 Laravel 4 中初始化用户定义的 MySQL 变量?

php - 如何在子域上上传 laravel 项目?

java - 在字节数组中存储特定字节数的整数 - JAVA

sql - PostgreSQL 中的 EXECUTE 语句语法错误