yii中的Mysql视图


Mysql view in yii

我创建了两个mysql视图,并从中生成了两个模型。

MostPopularCoupon

class MostPopularCoupon extends CActiveRecord
{
    public function tableName()
    {
        return 'most_popular_coupon';
    }
    public function rules()
    {
        return array(
            array('coupon_id', 'required'),
            array('coupon_id', 'numerical', 'integerOnly'=>true),
            array('left_coupons', 'length', 'max'=>22),
            array('stopped_at', 'safe'),
            array('left_coupons, coupon_id, stopped_at', 'safe', 'on'=>'search'),
        );
    }
    public function relations()
    {
        return array(
        );
    }
    public function attributeLabels()
    {
        return array(
            'left_coupons' => 'Left Coupons',
            'coupon_id' => 'Coupon',
            'stopped_at' => 'Stopped At',
        );
    }
    public function search()
    {
        $criteria=new CDbCriteria;
        $criteria->compare('left_coupons',$this->left_coupons,true);
        $criteria->compare('coupon_id',$this->coupon_id);
        $criteria->compare('stopped_at',$this->stopped_at,true);
        return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,
        ));
    }
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }
} 

MostActiveCity

class MostActiveCity extends CActiveRecord
{
    public function tableName()
    {
        return 'most_active_city';
    }
    public function rules()
    {
        return array(
            array('mines', 'length', 'max'=>21),
            array('city', 'length', 'max'=>255),
            array('mines, city', 'safe', 'on'=>'search'),
        );
    }
    public function relations()
    {
        return array();
    }
    public function attributeLabels()
    {
        return array(
            'mines' => 'Mines',
            'city' => 'City',
        );
    }
    public function search()
    {
        $criteria=new CDbCriteria;
        $criteria->compare('mines',$this->mines,true);
        $criteria->compare('city',$this->city,true);
        return new CActiveDataProvider($this, array(
            'criteria'=>$criteria,
        ));
    }
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }
}

但由于没有经验,不知道如何正确使用它们。我需要在查询中替换company_id,以获得当前用户所属公司的数据。。。

请重新定位您的设计。您最好拥有City{}和Coupon{}的模型类,然后在Coupon类中拥有MostPopularCoupons等函数。然后可以将它们作为类的函数进行调用。例如

在您的型号中

class Coupon extends CActiveRecord
{
    // NOTE: This is important for your alias column.
    public $couponCount;
    public function tableName()
    {
        return 'coupon';
    }
    ...
    public function MostPopularCoupons()
    {
       $Criteria = new CDbCriteria();
       $Criteria->select = ' count(*) as couponCount ';
       $lstCoupons       = Coupon::model()->findAll($Criteria);
       return $lstCoupons;
    }
}

然后,在您的控制器中

$coupon_id = 10;
$model1 = Coupon::model()->findByPK((int)$coupon_id);
$lstCouponCount = Coupon::MostPopularCoupons();