2014-11-08 40 views
0

在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"' 
       ) 
     ); 
    } 

查询工作,它只是没有我的呼唤_distance返回dist列。当我在phpmyadmin中运行查询时,它也可以正常工作。

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

任何想法我失踪了?

回答

0

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

执行活动记录查找查询时,会在每个结果行上调用populateRecord(),并检查是否存在模型属性或列名是否在数据库模式中定义。 http://www.yiiframework.com/doc/api/1.1/CActiveRecord#populateRecord-detail

class Bla extends CActiveRecord 
{ 
    public $dist; 

    //rest of your model 
} 

$ model-> dist现在应该适用于使用范围的实例。

+0

哇加入'公共$ dist;'工作!仍然没有得到为什么寿。不太明白doc中的解释。遗憾的是Yii的新手 – user2636556 2014-11-08 19:10:21

+1

ActiveRecord需要一个地方来存储结果。与记录的列属性不同,它自动创建魔术属性,“dist”不是模型的属性,所以除非手动提供公共属性,否则分配不会发生。 – 2014-11-08 21:46:26

+0

谢谢@WillemRenzema – user2636556 2014-11-10 02:37:39