codeignitercodeigniter-3

Set default (current datetime) to table column - CodeIgniter 3 migration


I have this migration:

public function up(){
    $this->dbforge->add_field([
        'id'=>['type'=>'int', 'unique'=>true, 'unsigned'=>true,'auto_increment'=>true],
        'email'=>['type'=>'varchar', 'constraint'=>200, 'null'=>true],
        'password'=>['type'=>'varchar', 'constraint'=>250],
        'created_at'=>['type'=>'datetime', 'default' => 'CURRENT_TIMESTAMP'],
    ]);
    $this->dbforge->add_key('id', TRUE);
    $this->dbforge->create_table('users', TRUE);
}

I am trying to set table with column created_at with default value - current datetime. I am using 'default' => 'CURRENT_TIMESTAMP', but I am getting this error:

Invalid default value for 'created_at' .... NOT NULL, created_at datetime NOT NULL DEFAULT 'CURRENT_TIMESTAMP',

I am using CodeIgniter 3 with MySQL.


Solution

  • this worked for me, and is valid in the documentation

    Passing strings as fields If you know exactly how you want a field to be created, you can pass the string into the field definitions with add_field()

    $this->dbforge->add_field("label varchar(100) NOT NULL DEFAULT 'default label'");

    Note: Passing raw strings as fields cannot be followed by add_key() calls on those fields.

    `$this->dbforge->add_field(
      array(
        'name' => 
          array(
            'type' => 'VARCHAR',
            'constraint' => '150',
          ),
        'email' => 
          array(
            'type' => 'varchar',
            'constraint' => '150',
            'unique'=> TRUE,
        ),
        'username' => 
          array(
            'type' => 'varchar',
            'constraint' => '80',
        ),
        'created_at datetime default current_timestamp',
        'updated_at datetime default current_timestamp on update current_timestamp',
        'status' => 
          array(
            'type' => 'tinyint',
            'constraint' => '1',
        ),
      )
    );`