选择包含条件和别名的表达式

时间:2014-11-08 14:08:12

标签: php mysql yii

在MySql中,你可以有这样的查询

SELECT d., d.is_new, 
      ( 
        d.distance - 1 
      ) AS `dist` 
FROM `table` AS d
WHERE d.is_new!='1' 
HAVING `dist` <= 10

如何在我的模型中使用我的范围功能在Yii 1.1.15中完成这项工作?现在我有了这个

public function scopes()
    {
        return array(
            '_distance'=>array(
                    'alias' => 'd',
                    'select'=>array('d.id, d.is_new, 
                                        ( 
                                            d.distance - 1 
                                        ) AS `dist`'
                                    ),
                    'having'=>'`dist` <= 10',
                    'condition'=>'d.is_new!="1"'
                )
        );
    }

查询有效,当我调用dist时,它只是不会返回_distance列。当我在phpmyadmin中运行查询时,它也能正常工作。

$dataProvider=new CActiveDataProvider(Bla::model()->_distance(), ..... );

知道我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

尝试在Active Record类中添加public $ dist属性。

执行Active Record find查询时,会在每个结果行上调用populateRecord(),并检查是否存在Model Property或者是否在数据库模式中定义了列名。 http://www.yiiframework.com/doc/api/1.1/CActiveRecord#populateRecord-detail

class Bla extends CActiveRecord
{
    public $dist;

    //rest of your model
}

$ model-&gt; dist现在可以在使用您的范围的实例上使用。