我无法在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
如果我删除第一行,还会显示其他用户记录,但是没有显示.....我真的很困惑
答案 0 :(得分:0)
如果要在gridview中使用daysleft,则必须在模型中声明为模型变量
public $daysleft;
然后您可以在gridview中使用$data->daysleft;