Adding an attribute to yii2 active record model that is not in database

572
January 26, 2017, at 06:21 AM

I have a mySQL database that has a table videos and two columns, start_time and end_time, which are in the format 2017-01-24 15:38:11.

I have an active record model Videos that extends \yii\db\ActiveRecord and i would like to add a few additional attribute that are not in the database.

I am trying to split the time stamp into a separate date and time that i can then display as columns in my gridview widget. I successfully did this by setting the column values directly in the view to functions with something like this...

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel'  => $searchModel,
    'columns' => 
    [
        [
        'class' => '\kartik\grid\DataColumn',
        'attribute' => 'videodate',
        'value' =>  function($model)
            {
                $datetime = new DateTime('start_time');
                $date = $datetime->format('Y-m-d');
                return $date;
            },
        ],  
    ],
    'responsive'=>true,
    'hover'=>true
]); ?>

However this is less than ideal as i would like to be able to utilize the date and time as attributes in my videoSearch model for filtering and sorting.

From my research i have added the attribute to the Video model in both my rules() and attributeLabel() functions however am unsure of how to set the value. My initial thought was to do it like a relation...

public function getVideodate(){
    $datetime = new DateTime('start_time');
    $date = $datetime->format('Y-m-d');
    return $date;
}

However this does not yield the desired results. I figured if i can get it defined and set in the model then adding it to the search model should be simple were as my temporary solution (in the view) complicated this significantly.

I intend to use kartik's daterange and time filters on his improved gridview widget. Thanks ahead and please let me know what else i can include.

Nick

Answer 1

In your model define virtual variables

class Video extends \yii\db\ActiveRecord {
    public $video_date; // defining virtual attribute
    public $video_time; // defining virtual attribute
    public function rules()
    {
        return [
            // other rules ...
            [['video_date', 'video_time'], 'safe'],
        ];
    }
    // this method is called after using Video::find()
    // you can set values for your virtual attributes here for example
    public function afterFind()
    {
        parent::afterFind();
        $datetime = new DateTime('start_time');
        $this->video_date = $datetime->format('Y-m-d');
        $this->video_time = $datetime->format('H:i:s');
    }
    // this method is called right before inserting record to DB
    // after calling save() on model
    public function beforeSave($insert)
    {
        if (parent::beforeSave($insert)) {
            if ($insert) {
                // if new record is inserted into db
            } else {
                // if existing record is updated
                // you can use something like this 
                // to prevent updating certain data
                // $this->status = $this->oldAttributes['status'];
            }
            $this->start_time = $this->video_date . ' '. $this->video_time;
            return true;
        }
        return false;
    }
}

In view you then use video_date / video_time as attribute, also you might want to add attribute labels to model too.

READ ALSO
Redirecting non-www subfolder domain to www on wordpress multisite

Redirecting non-www subfolder domain to www on wordpress multisite

I currently have a multisite built in wordpressThe domain is set up to be:

244
return statement not return any value in php function

return statement not return any value in php function

Can someone tell me why my return statement is not return any value in data[0] however if i choose to echo it, it shows that there is a value in data[0] but wouldn't work with the return statement

410
How make output from database in excel file

How make output from database in excel file

who can make output from database(on host) as excel filexlsx ?? I'am try some codes but the file after download not work :/ must download lib for it? help meeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

269
utf-8 do not work in all

utf-8 do not work in all

I am working on web site in phpEverything was good, already created 13 different pages but on next have a problem with some character

357