CJuiDatePicker总是将当前日期保存在数据库中


CJuiDatePicker Always saves present day in database

这是我在模型规则中的代码。。。

array('dataMedicao', 'type', 'type' => 'date', 'message' => '{attribute}: is not a date!', 'dateFormat' => 'yyyy-MM-dd'),
array('dataMedicao', 'default',
'value' => new CDbExpression('NOW()'), //automatically add the current date in mysql feild
'setOnEmpty' => true, 'on' => 'update'),
array('date_created,date_modified', 'default',
'value' => new CDbExpression('NOW()'),
'setOnEmpty' => false, 'on' => 'insert'),

protected function beforeSave() {
$this->dataMedicao = new CDbExpression('NOW()');
return parent::beforeSave();
}
protected function afterFind() {
$this->dataMedicao = date('Y-m-d', strtotime($this->dataMedicao));
return TRUE;
}

这是我在Form…中的代码

<?php echo $form->labelEx($model, 'dataMedicao'); ?>
<?php
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
'name' => 'dataMedicao',
'attribute' => 'dataMedicao',
'value' => $model->dataMedicao,
// additional javascript options for the date picker plugin
'options' => array(
'showAnim' => 'fold',
'dateFormat' => 'yy-mm-dd',
),
'htmlOptions' => array(
'style' => 'height:20px;'
),
));
?>
<?php echo $form->error($model, 'dataMedicao'); ?>

在我的数据库中,日期被设置为0000-00-00,当我列出它们时,它们被设置为1970-01-01…然后在更新时,我使用DatePicker来设置更新字段的日期,但它总是更新到我们所在的当前日期…我如何获得我在DatePicker中设置的日期,以及如何将其保存在数据库中?!感谢所有的帮助

无论何时更新记录,beforeSave都确保$this->dataMedicao始终设置为NOW()。拆下这条线或将其包裹在这样的条件下,即这只会在插入时发生。

protected function beforeSave() {
  if ($this->isNewRecord)
      $this->dataMedicao = new CDbExpression('NOW()');
  return parent::beforeSave();
}

这也可以通过编辑rules来完成。

此外,您的日期选择器代码应该引用$model,如下所示:

$this->widget('zii.widgets.jui.CJuiDatePicker', array(
    'model' => $model,
    'attribute' => 'dataMedicao',
    ...

否则,由于发布变量的namedataMedicao而不是<Model>[dataMedicao],因此无法在大规模分配期间设置dataMedicao