Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Yii 使用CDBC标准对记录进行硬计数_Yii_Count_Criteria - Fatal编程技术网

Yii 使用CDBC标准对记录进行硬计数

Yii 使用CDBC标准对记录进行硬计数,yii,count,criteria,Yii,Count,Criteria,当我尝试使用CDbCriteria统计记录时,我得到的活动记录“Hotels”试图选择一个无效列“count(t.id)作为count” 这是我的密码: $criteria = new CDbCriteria(); $criteria->select = 'count(t.id) as `count`, t.`keywords`, min(offers.first_bookin) as first_bookin'; $criteria->with =

当我尝试使用CDbCriteria统计记录时,我得到的活动记录“Hotels”试图选择一个无效列“count(t.
id
)作为
count

这是我的密码:

$criteria = new CDbCriteria();
        $criteria->select = 'count(t.id) as `count`, t.`keywords`, min(offers.first_bookin) as first_bookin';
        $criteria->with = array('offers');
        $criteria->group = 'offers.hotels_id';
        $criteria->compare('first_bookin','>' . date('Y-m-d'));
        $criteria->together = true;

        $hotelItems = Hotels::model()->findAll($criteria);
以下是我在酒店模型中定义的关系:

return array(
            'headers' => array(self::HAS_MANY, 'Headers', 'hotels_id'),
            'offers' => array(self::HAS_MANY, 'Offers', 'hotels_id'),
        );

我在这里和其他一些网站上发了很多帖子,但似乎什么都不管用。我尝试使用count(*)、count(id),我尝试将select属性拆分为一个数组。每次我都会收到相同的错误。

您需要声明一个变量
$count
,因为Yii不会自动启动非表列的变量,所以您不能在未声明的情况下使用任何新变量

你可以通过这样做来解决你的问题

声明模型变量:

class Hotels extends CActiveRecord
{
    public $count;
    ....

}

只需从别名中删除反勾号,计数就可以了。当然,如果您想轻松访问计数,您必须将其声明为类变量,正如onkarjanwa所提到的

如果您检查错误的来源,它是以下函数:在
CActiveFinder
中,计数的选择应该满足这一行,在
getColumnSelect
中:

elseif(preg_match('/^(.*?)\s+AS\s+(\w+)$/im',$name,$matches)) // if the column is already aliased
但是由于别名中的反勾号,它不匹配,并抛出一个错误。因此,您的
select
应该没有别名的反勾号:

$criteria->select = 'count(t.id) as count, t.`keywords`, min(offers.first_bookin) as first_bookin';
在测试时,您的
比较中出现另一个错误,因此您应该将其更改为:

$criteria->compare('offers.first_bookin','>' . date('Y-m-d')); // can't use the alias in where clause

谢谢各位。它在没有背景的情况下工作