Database 如何在Laravel DB查询中使用派生列

Database 如何在Laravel DB查询中使用派生列,database,laravel,postgresql,laravel-5,Database,Laravel,Postgresql,Laravel 5,我尝试在我的Laravel应用程序中设置一个查询时遇到了一些问题。 我试图在数据库级别计算一些东西,然后通过ajax调用将其返回给用户 下面是正在调用的函数的一部分: $query = \DB::table('db_table'); switch ($request['type']) { case 'type1': $settingValue = $request['type1']; $query = $query->

我尝试在我的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();
$query=\DB::table('DB_table');
开关($request['type'])){
案例“类型1”:
$settingValue=$request['type1'];
$query=$query->selectRaw('price-cost\u price AS margin');
$query=$query->havingRaw('margin<?',[$settingValue]);
打破
案例“类型2”:
$settingValue=$request['type2'];
$query=$this->addSelectQuery($query,”((价格-成本价格)/价格)作为利润);
$query=$query->havingRaw(“利润<?”,[$settingValue]);
打破
违约:
返回false;
}
$filteredProducts=$query->where('id','=',$id)->count();
我已经试过了where,whereRaw和have,但我一直都会犯同样的错误

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)
illumb\Database\QueryException:
SQLSTATE[42703]:未定义的列:7错误:列“边距”不存在
(SQL:从“db_表”中选择count(*),其中“id”=21,边距<15)

任何帮助都将不胜感激。

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

案例“类型1”:
$settingValue=$request['type1'];
$query->whereRaw('price-cost_price<?',[$settingValue]);
打破

问题在于您使用的是count()方法,该方法不会使用selectRaw

相反,将计数添加到select中,然后使用value()获取计数,类似于:

 $query->selectRaw('count(*) as count, price - cost_price AS margin')
       ->havingRaw('margin < ?', [$settingValue])
       ->value('count');
$query->selectRaw('count(*)作为计数,price-cost\u price作为保证金')
->havingRaw('保证金<?',[$settingValue])
->值(“计数”);

在您的
$query=$query->selectRaw('price-cost\u price AS margin')
行中,这应该是
总和(price-cost\u price)作为保证金
?不,这应该为每个记录计算,然后查询应该只检索保证金低于客户端在应用程序其他地方填写的数字的记录数量。是的,这似乎已经做到了。谢谢你的帮助。