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]: 無効な datetime 形式: 1292 不正な datetime 値: '' for column 'create_time' at row 1. The SQL statement was: 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 自体の自己完結型の動作であるため、動作するはずです。

Rules モデルに次を追加します。

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

ボタンをクリックした後、このようなことを試すことができます 作成 それはいくつかのアクションを取得します たとえば、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 に答える