3

我有这样的projects表结构

CREATE TABLE IF NOT EXISTS `projects` (
  `project_id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `description` text NOT NULL,
  `url` varchar(255) NOT NULL,
  `create_time` datetime DEFAULT NULL,
  `create_user_id` int(11) DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  `update_user_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`project_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

当我尝试使用下一个表单创建新记录时

在此处输入图像描述

模型规则:

public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('title, description, url', 'required'),
            array('create_user_id, update_user_id', 'numerical', 'integerOnly'=>true),
            array('title, url', 'length', 'max'=>255),
            array('create_time, update_time', 'safe'),
            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            array('project_id, title, description, url, create_time, create_user_id, update_time, update_user_id', 'safe', 'on'=>'search'),
        );
    }

我收到错误

CDbCommand 未能执行 SQL 语句:SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '' for column 'create_time' at row 1。执行的 SQL 语句为:INSERT INTO projects( title, description, url, create_time, create_user_id, update_time, update_user_id) VALUES (:yp0,:yp1,:yp2,:yp3,:yp4,:yp5,:yp6)

为什么?我如何告诉 Yii 日期时间字段不是必需的,如果未输入,可以包含默认值。

4

3 回答 3

5

试试这个,因为这是 Yii 内部的自包含行为,它应该可以工作:

在规则模型中添加:

public function behaviors(){
        return array('CTimestampBehavior'=>array(
        'class' => 'zii.behaviors.CTimestampBehavior',
        'createAttribute' => 'create_time',
        'updateAttribute' => 'update_time',
        'setUpdateOnCreate' => true,  
        ));
    }
于 2013-05-29T12:10:42.950 回答
1

你可以在你点击按钮后尝试这样的事情 Create 它会执行一些操作 以它为例 actionCreate() 在 actionCreate 你喜欢如图所示

public function actionCreate()
{
$model=new Project;
if(isset($_POST['Project']))
{
$model->attributes=$_POST['Project'];
$model->create_time=new CDbExpression('NOW()');
$model->save(false);
$this->redirect(array('view','id'=>$model->id));
}
$this->render('create',array(
'model'=>$model,
));
}
于 2013-05-29T09:48:55.380 回答
0

这不行吗?

public function beforeSave()
{
    if($this->isNewRecord)
    {
        $this->create_time=null;
        $this->update_time=null;
    }
    return parent::beforeSave();
}
于 2013-05-29T10:17:12.010 回答