Yii 如何在cgridview中显示任何模型中都不包含的列?

Yii 如何在cgridview中显示任何模型中都不包含的列?,yii,cgridview,Yii,Cgridview,我无法在cgridview中显示未包含在模型的任何虚拟属性中的列 fnname函数在model1中,其中pid、mid、expirydate是属性 ( fsp.pid = ".$this->pid." AND fsp.mid=".$this->mid. )"; $this->pid在model1中是fk,它属于model2……$this->mid是model1的主键,cgridview不会显示此代码,因为$this->pid$this->mid的值为空,如果

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

fnname函数在model1中,其中pid、mid、expirydate是属性

 ( fsp.pid = ".$this->pid." 
    AND fsp.mid=".$this->mid.
     )"; 
$this->pid在model1中是fk,它属于model2……$this->mid是model1的主键,cgridview不会显示此代码,因为$this->pid$this->mid的值为空,如果我删除start to end它,则显示其余值

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为空

如果删除//开始//结束行,将显示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
例如,对于userid3,它应该显示他的所有记录

   $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",
)


如果我删除一行,其他用户记录也会显示出来,但不会被删除。。。。。我真的很困惑

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

public $daysleft;

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

您得到的错误是什么?此处的虚拟列名是什么?@Letmese从tbl fsp中选择datedifffsp.expirydate、CURDATEas daysleft,其中fsp.pid=和fsp.mid=。。。。。。。。。。。。fsp.pid=和fsp.mid=。。。。。。。。这些没有值您想在gridview中使用daysleft吗?$this->pid和$this->midfsp.pid=和fsp.mid=的值应该满足哪些要求,但这些值为nullpid,mid始终为空?或者有一些值?是的,它总是空值,而这两个属性都是同一个模型,我给它们分配了select查询,它不分配这些值。我明白了,你是说这个代码吗。。。。。。这是从tbl fsp中选择datedifffsp.expirydate、CURDATEas daysleft的例外,其中fsp.pid=和fsp.mid=确实要传递pid和mid的空值吗?
public $daysleft;