如何在cgridview中显示未包含在任何模型中的列?

时间:2014-01-21 07:17:27

标签: yii cgridview

我无法在cgridview中显示未包含在任何模型的虚拟属性中的列

fnname函数在model1中(其中pid,mid,expirydate属性)

 ( fsp.pid = ".$this->pid." 
    AND fsp.mid=".$this->mid.
     )"; 

$ this-> pid是model1中的fk,它属于model2 ...... $ this-> mid是pk到model1,cgridview不显示此代码作为$ this-> pid的值$ this-> mid为null如果我删除开始结束它显示剩余值

public function  fnname()
{
    $uid=Yii::app()->SESSION['mid'];
    $criteria=new CDbCriteria;
    //start
    $post_table = Model1::model()->tableName();
    $post_count_sql = "(SELECT  datediff(fsp.expirydate,CURDATE())as daysleft
    from $post_table fsp
    WHERE ( fsp.pid = ".$this->pid." 
    AND fsp.mid=".$this->mid.
     )";

    $criteria->select = array(
    '*',
    $post_count_sql . " as daysleft",
);

    $criteria->compare('$post_count_sql', $this->daysleft);
    //end
    $criteria->condition='userid='.$userid;

    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
        'pagination' => array('pageSize' => 2),
    ));
}

发生错误

 SELECT  datediff(fsp.expirydate,CURDATE())as daysleft
     from tbl fsp
   WHERE ( fsp.pid = 
  AND fsp.mid=
 )

此处fsp.pid和fsp.mid为空白

如果我删除// start // end line,则gridview显示

如果我有这个查询,那么

     (SELECT datediff( fsp.expirydate, CURDATE( ) ) AS daysleft
FROM tbl1 fsp

) 
     Cardinality violation: 1242 Subquery returns more than 1 row. The SQL statement executed was: SELECT *, (SELECT datediff( fsp.expirydate, CURDATE( ) ) AS daysleft
FROM tbl1 fsp

) as daysleft FROM `tbl1` `t` WHERE uid=3 

请让我知道我做错了什么。

输出必须像tihs

ptid   mid    daysleft   userid
1       1      30        3
2       1      10         3
1       10      1         3

即。对于用户ID 3,它应显示所有记录

   $criteria=new CDbCriteria;
//start
$post_table = Model1::model()->tableName();
$post_count_sql = "(SELECT  datediff(fsp.expirydate,CURDATE())as daysleft
from $post_table fsp
WHERE ( fsp.pid = ".$this->pid." 
AND fsp.mid=".$this->mid.
 )";

$criteria->select = array(
'*',
$post_count_sql . " as daysleft",

);

$criteria->compare('$post_count_sql', $this->daysleft);
//end
$criteria->condition='userid='.$userid;///line1

如果我删除第一行,还会显示其他用户记录,但是没有显示.....我真的很困惑

1 个答案:

答案 0 :(得分:0)

如果要在gridview中使用daysleft,则必须在模型中声明为模型变量

public $daysleft;

然后您可以在gridview中使用$data->daysleft;