codeigniter 4迁移文件未创建表



当我第一次为表users创建迁移文件时,迁移文件中的public function down()是空的。当我运行php spark migrate时,创建了表users

然后我用php spark make:migration users生成了另一个迁移文件,根据新的表结构进行了一些调整,并将$this->forge->dropTable('users');放入public function down()中。但是当我再次运行php spark migrate时,users表没有新字段。。

我使用的是codeigniter 4和mysql。这是我的代码

UserModelphp

<?php
namespace AppModels;
use CodeIgniterModel;
class UserModel extends Model
{
protected $DBGroup          = 'default';
protected $table            = 'users';
protected $primaryKey       = 'id';
protected $useAutoIncrement = true;
protected $insertID         = 0;
protected $returnType       = 'array';
protected $useSoftDeletes   = false;
protected $protectFields    = true;
// added created_at and updated_at
protected $allowedFields = ['username', 'password', 'foto', 'nama', 'email', 'telepon', 'created_at', 'updated_at'];
// Dates
protected $useTimestamps = false;
protected $dateFormat    = 'datetime';
protected $createdField  = 'created_at';
protected $updatedField  = 'updated_at';
protected $deletedField  = 'deleted_at';
// Validation
protected $validationRules      = [];
protected $validationMessages   = [];
protected $skipValidation       = false;
protected $cleanValidationRules = true;
// Callbacks
protected $allowCallbacks = true;
protected $beforeInsert   = [];
protected $afterInsert    = [];
protected $beforeUpdate   = [];
protected $afterUpdate    = [];
protected $beforeFind     = [];
protected $afterFind      = [];
protected $beforeDelete   = [];
protected $afterDelete    = [];
}

第一个迁移文件

<?php
namespace AppDatabaseMigrations;
use CodeIgniterDatabaseMigration;
class Users extends Migration
{
public function up()
{
// tabel users
$this->forge->addField([
'id' => [
'type' => 'INT',
'constraint' => 7,
'auto_increment' => true,
],
'username' => [
'type' => 'VARCHAR',
'constraint' => 50,
'null' => false,
],
'password' => [
'type' => 'VARCHAR',
'constraint' => 255,
'null' => false,
],
'profile_pic' => [
'type' => 'VARCHAR',
'constraint' => 50,
],
'nama' => [
'type' => 'VARCHAR',
'constraint' => 50,
],
'email' => [
'type' => 'VARCHAR',
'constraint' => 100,
],
'telepon' => [
'type' => 'VARCHAR',
'constraint' => 10,
],
]);
$this->forge->addKey('id', true);
$this->forge->createTable('users');
}
public function down()
{
// hapus tabel users
}
}

新的迁移文件

<?php
namespace AppDatabaseMigrations;
use CodeIgniterDatabaseMigration;
class Users extends Migration
{
public function up()
{
// tabel users
$this->forge->addField([
'id'       => [
'type'           => 'INT',
'constraint'     => 7,
'auto_increment' => true,
],
'username' => [
'type'       => 'VARCHAR',
'constraint' => 50,
'null'       => false,
],
'password' => [
'type'       => 'VARCHAR',
'constraint' => 255,
'null'       => false,
],
'foto'     => [
'type'       => 'VARCHAR',
'constraint' => 50,
],
'nama'     => [
'type'       => 'VARCHAR',
'constraint' => 50,
],
'email'    => [
'type'       => 'VARCHAR',
'constraint' => 100,
],
'telepon'  => [
'type'       => 'VARCHAR',
'constraint' => 10,
],
'created_at DATETIME DEFAULT CURRENT_TIMESTAMP',
'updated_at DATETIME DEFAULT CURRENT_TIMESTAMP',
]);
$this->forge->addKey('id', true);
$this->forge->createTable('users');
}
public function down()
{
// hapus tabel users
$this->forge->dropTable('users');
}
}

有人能告诉我我做错了什么吗?非常感谢您的帮助

说明:

执行php spark migrate时,不会调用down()方法

当您使用php spark migrate:rollback执行迁移回滚过程时,会运行down()方法。

解决方案:

在CCD_ 15方法的开头加上CCD_;新迁移文件";。

新的迁移文件

// ...
class Users extends Migration
{
public function up()
{
$this->forge->dropTable('users');
// ...
}
// ....
}

CCD_ 16方法的目的是";反向";在CCD_ 17方法中执行的所有操作。


额外注释:

考虑到在新的迁移中,您只重命名了一个现有的表列(profile_pic->foto(并添加了时间戳列,如果您指定一个更有意义的";迁移名称";。

此外,与删除&重新创建现有表时,请修改该表。I.e:

新的迁移文件

A。命令(创建新的迁移(:

php spark make:migration alter_users_rename_profile_pic_add_timestamps

B。生成的迁移。

<?php
namespace AppDatabaseMigrations;
use CodeIgniterDatabaseMigration;
class AlterUsersRenameProfilePicAddTimestamps extends Migration
{
private $tableName = "users";
public function up()
{
$this->forge->modifyColumn($this->tableName, [
"profile_pic" => [
'name' => 'foto',
'type' => 'VARCHAR',
'constraint' => 50,
]
]);
$this->forge->addColumn($this->tableName, [
'created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP',
'updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP',
]);
}
public function down()
{
$this->forge->modifyColumn($this->tableName, [
"foto" => [
'name' => 'profile_pic',
'type' => 'VARCHAR',
'constraint' => 50,
]
]);
$this->forge->dropColumn($this->tableName, ["created_at", "updated_at"]);
}
}

最新更新