2014-11-08 46 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