如何在CodeIgniter的迁移中使用down()方法?

时间:2015-05-26 05:42:55

标签: php codeigniter

我阅读了CodeIgniter关于迁移类的文档。我能够执行迁移但是如何在迁移中使用down()函数?

以下是文档中的示例

defined('BASEPATH') OR exit('No direct script access allowed');

class Migration_Add_blog extends CI_Migration {

    public function up()
    {
        $this->dbforge->add_field(array(
            'blog_id' => array(
                'type' => 'INT',
                'constraint' => 5,
                'unsigned' => TRUE,
                'auto_increment' => TRUE
            ),
            'blog_title' => array(
                'type' => 'VARCHAR',
                'constraint' => '100',
            ),
            'blog_description' => array(
                'type' => 'TEXT',
                'null' => TRUE,
            ),
        ));

        $this->dbforge->create_table('blog');
    }

    public function down()
    {
        $this->dbforge->drop_table('blog');
    }

在我的页面中,我设置了这样的迁移:

class Migrate extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->library('migration');
    }

    public function index() {

        $this->load->helper('template');

        if(!$this->migration->current()) {
            show_error($this->migration->error_string());
        } else {
            $data['message'] = 'migrate success';
        }

        renderPage('common/migrate', $data);

    }

}

如何调用down()方法?

1 个答案:

答案 0 :(得分:8)

TL;博士

迁移视为 Git 中的版本。

通过调用比当前更早的迁移来调用down()方法。

TS组成; dr

假设您在目录application/migrations/下有3个当前时间的迁移文件。

  1. 001_add_clients.php
  2. 002_add_customers.php
  3. 003_add_blog.php
  4. 因此,目前您的应用程序已经过了上面列出的3次迁移,并且您config/migration.php中的当前迁移状态设置为

    $config['migration_table'] = 'migrations';
    $config['migration_version'] = 3;
    

    您的名为migrations的表格version设置为3

    现在,当您通过迁移控制器运行$this->migration->current();时,它将无法执行任何操作,因为您已处于当前的迁移状态。

    现在,您以某种方式创建博客的想法失败了,并希望您的应用程序以迁移状态002返回。

    您可以通过调用控制器中的$this->migration->version(2);来调用此方法

    在控制器的$config['migration_version'] = 2;config.php设置$this->migration->current();

    这是

    的场景
    public function down()
    {
        $this->dbforge->drop_table('blog');
    }
    

    方法调用文件003_add_blog.php