我陷入了这种情况
我在这里有一个小的自定义搜索模型代码
$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-&gt;('distance&lt; = 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);
}
那么,有解决方案/解决方法吗?
答案 0 :(得分:1)
这是一个难以运行的查询吗?你有很多记录,因为最愚蠢的解决方案是宣布
$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类,并使用您自己的版本覆盖计数,并将其考虑在内。