gpt4 book ai didi

yii - 使用 CDbCriteria 很难计算记录

转载 作者:行者123 更新时间:2023-12-02 02:11:04 27 4
gpt4 key购买 nike

当我尝试使用 CDbCriteria 对记录进行计数时,我得到 Active record "Hotels"is trying to select an invalid column "count(t.id) as 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 属性拆分为一个数组。每次我遇到同样的错误。

最佳答案

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

如果你检查错误的来源,就是这个函数:getColumnSelect CActiveFinder, select for count 应该满足这一行, 在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';

当我测试它时,我在你的compare 中发现另一个错误,所以你应该将它更改为:

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

关于yii - 使用 CDbCriteria 很难计算记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12848982/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com