Создать ENUM в POSTGRESQL, используя Codeigniter Migrations и DBFORGE

Я хочу создать таблицу с полем 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:

1

Решение

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

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

0

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

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

'null' => TRUE,

в

'null' => FALSE,
-1

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