CodeIgniter Migration - PullRequest
       3

CodeIgniter Migration

0 голосов
/ 29 ноября 2018

Я начал изучать миграции CodeIgniter, которые улучшают стандарты разработки для моей новой работы.

Но по какой-то причине я не могу создать какую-либо таблицу в своей базе данных.

Над кодом миграции:

<code><php

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

class Migration_Create_users_table extends CI_Migration {

public function __construct()
{
  parent::__construct();
  $this->load->dbforge();
}

public function up()
{

    $fields = array(
        'user_id' => array(
                'type' => 'INT',
                'constraint' => 11,
                'unique' => TRUE,
                'null' => FALSE,
                'auto_increment' => TRUE
        ),
        'user_name' => array(
                'type' => 'VARCHAR',
                'constraint' => '255',
                'null' => FALSE,
        ),
        'user_email' => array(
                'type' => 'VARCHAR',
                'constraint' => '255',
                'null' => FALSE,
        ),
        'user_password' => array(
                'type' => 'VARCHAR',
                'constraint' => '255',
        ),
        'user_status' => array(
                'type' => 'INT',
                'constraint' => 1,
                'default' => 0
        ),
        'user_permissions' => array(
                'type' => 'VARCHAR',
                'constraint' => '255',
        ),
        'device_token' => array(
                'type' => 'VARCHAR',
                'constraint' => '255',
        ),
        'user_level' => array(
                'type' => 'INT',
                'constraint' => 3,
                'default' => '=9'
        ),
        'user_photo' => array(
                'type' => 'VARCHAR',
                'constraint' => '255',
        ),
        'device_snid' => array(
                'type' => 'VARCHAR',
                'constraint' => '255',
        ),
        'user_recovery_token' => array(
                'type' => 'VARCHAR',
                'constraint' => '255',
        ),
        'client' => array(
                'type' => 'INT',
                'constraint' => 11,
                'null' => FALSE,
                'default' => 0
        ),
        'latitude' => array(
                'type' => 'VARCHAR',
                'constraint' => '255',
        ),
        'longitude' => array(
                'type' => 'VARCHAR',
                'constraint' => '255',
        )

    );

    $this->dbforge->add_field($fields);
    $this->dbforge->add_key('user_id', TRUE);
    $attributes = array('ENGINE' => 'InnoDB');
    try{
        $this->dbforge->create_table('users',TRUE,$attributes);
        echo '<pre>Table created
';} catch (исключение $ e) {echo '
Error creating table.
';д ($ е);} $ this-> db-> query ("INSERT INTO` users` VALUES (1, 'SYSTEM', 'NOUSERNAME', '111', 0, NULL, NULL, NULL, -9, NULL, NULL, NULL, 1, НОЛЬ НОЛЬ)");} public function down () {$ this-> dbforge-> drop_table ('users', TRUE);}}

Имя файла миграции: /aplication/migrations/20181129120800_Create_users_table.php

Метод контроллера для запуска миграции:

public function do_migration($version = NULL)
    {
      $this->load->library('migration');

      if(isset($version) && ($this->migration->version($version) === FALSE))
      {
        show_error($this->migration->error_string());
      }

      elseif(is_null($version) && $this->migration->latest() === FALSE)
      {
        show_error($this->migration->error_string());
      }

      else
      {
        echo 'The migration has concluded successfully.';
      }
    }

CodeIgniter создает 'миграции'Таблица и установить "версию" в качестве временной метки имени файла, как и ожидалось.

Таблица 'users' не создана.Отладочное сообщение "таблица создана" печатается.

Если я тестирую метод $ this-> dbforge-> create_table ('users', TRUE, $ attribute); возвращает false .

Попытка отладки и попытка / отлов для ошибок, но единственным результатом является bool (false) .

Если я создаю какую-либо таблицу и выбираю данные на ней, CI возвращает ее, какожидается, потому что соединение с БД в порядке.

РЕДАКТИРОВАТЬ

Найдите проблему: внутри полей была опечатка на уровне user_level, где по умолчанию было установлено "= 9"(недействительное целое число), когда оно должно было быть "-9".

1 Ответ

0 голосов
/ 29 ноября 2018

Проблема пытается поймать исключение, потому что dbforge не выдает никаких исключений.Вы должны вернуться к старому доброму if условному.

<code>if($this->dbforge->create_table('users',TRUE,$attributes) === FALSE)
{
    echo '<pre>Error creating table.
';вернуть;} echo '
Table created
';$ res = $ this-> db-> query ("INSERT INTO` users` VALUES (1, 'SYSTEM', 'NOUSERNAME', '111', 0, NULL, NULL, NULL, -9, NULL, NULL, NULL, 1, NULL, NULL) ");echo $ res?'
Insert Succeeded
': '
Insert Failed
';

Не относится к вашей проблеме, но вам не нужен метод __construct в Migration_Create_users_table.Библиотека dbforge загружается родительским классом CI_Migration.Нет причины переопределять CI_Migration::__construct, и если бы у вас была причина, a * для вызова parent::__construct($config); было бы абсолютной необходимостью.(О, и расширяющемуся классу нужно было бы принять параметр $config в своем конструкторе.)

В случае, если последний абзац неясен (да, я набросался), удалите конструктор из Migration_Create_users_table.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...