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
In your model define virtual variables
In view you then use video_date / video_time as attribute, also you might want to add attribute labels to model too.