yii2使用自定义列查询给出:“具有子句”中的未知列“ columnname”

阿肖克·波德尔

我在这里陷入困境

我在这里有一个小的自定义搜索模型的代码

    $query = Ad::find();

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    if($subcategorymodel){
        $query->andFilterWhere([
            'sub_category_id' => $subcategorymodel->id,
        ]);
    }
    if($adcategorymodel){
        $query->andFilterWhere([
            'ad_category_id' => $adcategorymodel->id,
        ]);
    }
    if($nearmodel){
        $lat = $nearmodel->latitude;
        $long = $nearmodel->longitude;
        $query->select('*, (
        (
        ACOS( SIN( '.$lat.' * PI( ) /180 ) * SIN( latitude * PI( ) /180 ) + COS( '.$lat.' * PI( ) /180 ) * COS( latitude * PI( ) /180 ) * COS( ( '.$long.' - `longitude` ) * PI( ) /180 ) ) *180 / PI( )
        ) *60 * 1.1515 * 1.609344
        ) AS distance');

        $query->having('distance <=100'); //condition for my custom column
    }

    $query->andFilterWhere([
        'status' => 1,
    ]);

    return $dataProvider;

使用$ query-> having('distance <= 100');可以正常运行 子句,但我收到此错误

   SQLSTATE[42S22]: Column not found: 1054 Unknown column 'distance' in 'having clause'
   The SQL being executed was: SELECT COUNT(*) FROM `tbl_ad` WHERE ((`sub_category_id`=1) AND    (`ad_category_id`=1)) AND (`status`=1) HAVING distance <=100
   Error Info: Array
   (
     [0] => 42S22
     [1] => 1054
     [2] => Unknown column 'distance' in 'having clause'

在我看来

<?php 
    echo ListView::widget([
     'dataProvider' => $dataProvider,
     'itemOptions' => ['class' => 'item'],
     'itemView' => '_item_view',
     'pager' => ['class' => \kop\y2sp\ScrollPager::className()]
]);
?>

在检查错误堆栈时,在代码周围的某个地方,yii2在这里调用此函数(我猜想使用分页数据)

public function count($q = '*', $db = null)
{
    return $this->queryScalar("COUNT($q)", $db);
}

因此,是否有解决方案/变通办法?

Mihai P.

这是很难执行的查询吗?您是否有很多记录,因为最愚蠢的解决方案是声明

$query->having('(
        (
        ACOS( SIN( '.$lat.' * PI( ) /180 ) * SIN( latitude * PI( ) /180 ) + COS( '.$lat.' * PI( ) /180 ) * COS( latitude * PI( ) /180 ) * COS( ( '.$long.' - `longitude` ) * PI( ) /180 ) ) *180 / PI( )
        ) *60 * 1.1515 * 1.609344
        ) <=100');

另一个解决方案是创建您自己的Query类,并考虑到您自己的版本来覆盖计数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

data.table中的get(columnname)vs [[columnname]]

从Powershell结果中删除@ {ColumnName

稍后在查询中使用“ AS ColumnName”的值

列<COLUMNNAME>是类型jsonb的但表达的类型是文本的[]

R DataTable在ColumnName之后保留列

'AND columnName NOT IN' 在 mysql 中不起作用

插入表中从表中选择,其中columnname = xxx和columnname2 = yyy循环太多

在Linq C#中按[ColumnName]进行选择计数(ColumnName)分组

StreamSets JDBC查询使用者-未定义列。columnName = 0

Android Room多个字段具有相同的columnName

房间。错误:多个字段具有相同的columnName

创建一个具有长ColumnName的Julia DataFrame

SQL Select语句(如果列与值匹配)作为ColumnName

tcl:将columnName动态传递给SQL更新查询

是否有可能从datagridview ColumnName中找到变量?

findByAll(),findBy {columnName}在Spring数据JPA中不起作用

什么是SQL Server中的encode(<columnName>,'escape')PostgreSQL等效项?

ProgrammingError:1054(42S22):“字段列表”中的未知列“ ColumnName”

如何将数据框中的每一列转换为具有 ColumnName 和 ColumnValue 的行

选择列表中的“ columnName”列无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中

如何解决“列'ColumnName'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。”

僅從表頭中選擇存在於數據字典 ColumnName 中的那些列

Spring Boot Controller中的发布请求抛出“ java.sql.SQLIntegrityConstraintViolationException:列'columnname'不能为空”

给定的 ColumnName 'ACTUAL DATE' 与数据源中的任何列都不匹配

如果df.ColumnName(列名来自Pyspark中的用户)如何获取列值

EF Core Add-Migration使用ColumnName1生成额外的列

表'tableName'包含一个约束定义,该约束定义的列'columnName'不在表Java Derby中

Android Room和继承。错误:多个字段具有相同的columnName

MySQL错误代码:1264。行1的列'columnname'超出范围值