使用Yii框架在模型类中添加新字段

时间:2011-02-15 12:23:32

标签: php yii

在表格中,我有列'描述',其中包含商品描述。 我希望在CGridView列中包含'short_description',它将包含前150个字符。

class Product extends CActiveRecord
{   
    /**
     * The followings are the available columns in table 'Product':
     * @var integer $id
     * @var integer $id_cat
     * @var string $title
     * @var string $description
     * @var timestamp $date
     */
    public $id;
    public $id_cat;
    public $title;
    public $description;
    public $date;
    public $short_description ;

    public function init()
    {
        $this->short_description = substr($this->description, 0, 150);     
    }

不幸的是,此代码不起作用。

3 个答案:

答案 0 :(得分:6)

您需要覆盖模型类的afterFind函数并编写代码

$ this-> short_description = substr($ this-> description,0,150);

在afterFind函数中

你需要做这样的事情

protected function afterFind()
{
    parent::afterFind();
    $this->short_description = substr($this->description, 0, 150);
}

答案 1 :(得分:4)

另一个选择是定义函数

public function getShortDescription()
{
   return substr($this->description, 0, 150);
}

然后你可以调用$ product-> shortDescription(使用get magic方法)。

通过这种方式,简短的描述只会在需要时“计算”,而不是在每次查找之后,即使它没有被使用。

答案 2 :(得分:0)

您可以使用Virtual Attributes。这是专门用于访问更改的变量。你可以read more here

在模型中你可以使用这个功能:

public function getShortDescription(){
        return substr($this->description, 0, 150);
}

您也可以在课程顶部添加变量:

public $shortDescription = substr($this->description, 0, 150);