【发布时间】:2019-04-16 09:42:44
【问题描述】:
我在 Codeigniter 3 中使用 CI 提供的 Migration 库和在线教程的帮助为数据库创建了迁移文件。我的迁移文件如下所示,
<?php
class Migration_Leave_tracker extends CI_Migration {
public function up() {
$this->dbforge->add_field(array(
'id' => array(
'type' => 'INT',
'constraint' => 11,
'auto_increment' => TRUE
),
'emp_id' => array(
'type' => 'INT',
'constraint' => 11,
),
'start_date' => array(
'type' => 'DATE',
),
'end_date' => array(
'type' => 'DATE',
),
'created_date' => array(
'type' => 'DATETIME',
),
));
$this->dbforge->add_key('id', TRUE);
$this->dbforge->create_table('leave_tracker');
}
public function down() {
$this->dbforge->drop_table('leave_tracker');
}
}
在这里你可以看到我的迁移文件有两种方法,一种是up(),用于创建表,另一种是down(),用于删除表。
我有另一个控制器可以运行迁移,
public function migrate($version = null) {
$this->load->library('migration');
if ($version != null) {
if ($this->migration->version($version) === FALSE) {
show_error($this->migration->error_string());
} else {
echo "Migrations run successfully" . PHP_EOL;
}
return;
}
if ($this->migration->latest() === FALSE) {
show_error($this->migration->error_string());
} else {
echo "Migrations run successfully" . PHP_EOL;
}
}
根据 CI 文档,这段代码将创建所有迁移,我猜在后台它将调用所有迁移类的 up() 方法来创建表。
现在我的问题是如何创建一个方法,该方法将使用迁移类的drop() 方法删除数据库中的所有表。我在文档中找不到任何参考。
【问题讨论】:
-
通常迁移文件只会删除在类的
up()中创建的表(在down()中)。 -
@DFriend 这就是我想要的,但问题是如何做到这一点。
-
我对您的陈述感到困惑,“...将删除数据库中的所有表”。 (强调我的)我想出了一种方法来做到这一点,但那是一段时间前的事了。我会在时间允许的时候寻找代码并在这里分享。可能是一两天,
标签: php codeigniter-3 database-migration