Добавление нового поля в модельный класс с использованием фреймворка Yii - PullRequest
3 голосов
/ 15 февраля 2011

В таблице у меня есть столбец «описание», который содержит описание товара.Я хочу включить в столбец 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 ]

6 голосов
/ 15 февраля 2011

Вам необходимо переопределить функцию afterFind класса модели и написать код

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

в функции afterFind.

Вы должны сделать что-то вроде этого

protected function afterFind()
{
    parent::afterFind();
    $this->short_description = substr($this->description, 0, 150);
}
4 голосов
/ 16 февраля 2011

Другой вариант - определить функцию

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

Затем вы можете вызвать $ product-> shortDescription (используя метод get magic).

Таким образом, краткое описание будет «рассчитываться» только при необходимости, а не после каждой находки, даже если оно не используется.

0 голосов
/ 17 декабря 2012

Вы можете использовать Виртуальные атрибуты . Это специально разработано для доступа к измененным переменным. Вы можете узнать больше здесь

Внутри модели вы можете сделать эту функцию:

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

Вы также можете просто добавить переменную вверху класса:

public $shortDescription = substr($this->description, 0, 150);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...