Создать ENUM в POSTGRESQL с помощью Codeigniter Migrations и DBFORGE - PullRequest
0 голосов
/ 07 января 2019

Я хочу создать таблицу с полем ENUM в базе данных postgres.

Обычно, когда мы создаем enum в postgresql, мы называем enum и столбец, в который мы хотим установить enum we, выбираем это имя enum. Но как мне это сделать в Codeigniter?

Ниже мой код:

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

class Migration_Admin_Locations extends CI_Migration {

        public function up()
        {

                $this->dbforge->add_field(array(
                        'id' => array(
                                'type' => 'INT',
                                'null' => FALSE,
                                'auto_increment'=>TRUE,
                                'constraint' => 11,
                        ),
                        'location_name' => array(
                                'type' => 'VARCHAR',
                                 'constraint' => 50,
                                 'null' => TRUE,
                        ),
                        'tenant_id' => array(
                                'type' => 'INT',
                                'null' => TRUE,
                        ),
                        'description' => array(
                                'type' => 'VARCHAR',
                                 'constraint' => 128,
                                 'null' => TRUE,
                        ),
                        'is_default' => array(
                                'type' => 'ENUM("a","b","c")',
                                'default' => "a",
                                'null' => TRUE,
                        ),
                ));

            $this->dbforge->add_key('id');
            $this->dbforge->create_table('admin_locations');
            $query = $this->db->get('admin_locations');
            $res=$query->num_rows();

             if($res==0)
             {
                $data = array(
                        'id'=>"1",
                        'location_name'=>"default site",
                        'tenant_id'=>"1",
                        'description'=>"This is default site for portal",
                        'is_default'=>"a",
                     );
                $this->db->insert('admin_locations', $data); 
            }

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

Но это вызывает ошибку:

Произошла ошибка PHP. Серьезность: предупреждение

Сообщение: pg_query (): Ошибка запроса: ОШИБКА: тип "enum" не существует Строка 6: "is_default" ENUM ("a", "b", "c") DEFAULT 'no' NULL ^

Имя файла: postgre / postgre_driver.php

Номер строки: 242

Backtrace:

Ответы [ 2 ]

0 голосов
/ 07 января 2019

В PostgreSQL вы должны сначала создать свой тип enum, а затем использовать его в качестве типа поля. См. Перечислимый тип PostgreSQL документация для справки.

Я немного знаю CI, но вижу, что Класс Database Forge не поддерживает создание типов перечислений, поэтому вам придется сначала создать его с использованием чистого SQL или какого-либо построителя CI SQL, а затем возможно, вы сможете использовать это имя типа enum в методе add_field.

0 голосов
/ 07 января 2019

в перечислении вы не можете передать нулевые данные ... это ошибка sql ... изменить is_default массив

'null' => TRUE,

до

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