Создать базу данных с классом миграции codeigniter

Я хочу интегрировать класс миграции Codeigniter в процесс сборки моего проекта. Могу ли я использовать класс миграции для создания баз данных, или это единственная цель, чтобы постоянно обновлять структуру базы данных?

Мой класс миграции выглядит так:

class Migration_base extends CI_Migration {
public function up()
{
$this->dbforge->create_database('my_db');
}
public function down()
{
$this->dbforge->drop_database('my_db');
}
}

Когда я запускаю этот код:

class Migrate extends CI_Controller
{
public function index()
{
$this->load->library('migration');

if ($this->migration->current() === FALSE)
{
show_error($this->migration->error_string());
}
}

}

Я получаю это сообщение:

Database error: A Database Error Occurred
Unable to connect to your database server using the provided settings.
Filename: path_to_codeigniter/codeigniter/framework/system/database/DB_driver.php
Line Number: 436

Кажется, база данных уже должна существовать, прежде чем я смогу использовать класс миграции. Правильно ли я и нужно написать обертку вокруг класса миграции, где я сначала создаю базу данных?

0

Решение

Ваше подозрение, что для создания базы данных в рамках миграции потребуется обходной путь, похоже на правду. Я не знаю, можно ли это назвать ошибкой или отсутствующей функцией, но она не будет делать это так, как написано.

Большая проблема в том, что _migration_table созданный класс должен быть в базе данных, которую нужно перенести. Классическая проблема «курица или яйцо».

Другая возможная проблема, которую документация предполагает и не решает, заключается в том, что база данных, которую нужно перенести, должна быть «загружена».

Я думаю, что следующая версия вашего Migrate Контроллер будет обрабатывать обе эти проблемы.

class Migrate extends CI_Controller
{
public function index()
{
if( ! isset($this->db))
{
throw new RuntimeException("Must have a database loaded to run a migration");
}

// Are we connected to 'my_db' ?
if( ! $this->db->database !== 'my_db')
{
//find out if that db even exists
$this->load->dbutil();
if( ! $this->dbutil->database_exists('my_db'))
{
// try to create 'my_db'
$this->load->dbforge();
if( ! $this->dbforge->create_database('my_db'))
{
throw new RuntimeException("Could not create the database 'my_db");
}
}

// Connection data for 'my_db' must be available
// in /config/database.php for this to work.
if(($db = $this->load->database('my_db', TRUE)) === TRUE)
{
$this->db = $db;  //replace the previously loaded database
}
else
{
throw new RuntimeException("Could not load 'my_db' database");
}
}

$this->load->library('migration');

if($this->migration->current() === FALSE)
{
show_error($this->migration->error_string());
}
}
}

Пожалуйста, знай я не проверял этот код Там может быть синтаксис, логика или другие ошибки. Если ничего другого, надеюсь, это даст вам хорошую отправную точку

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector