【发布时间】:2018-04-13 07:39:24
【问题描述】:
CREATE TABLE public.tasks(
id integer NOT NULL DEFAULT nextval('tasks_id_seq'::regclass),
title character varying(255) NOT NULL,
status character varying(255) NOT NULL,
type character varying(255) NOT NULL,
CONSTRAINT tasks_pkey PRIMARY KEY (id),
CONSTRAINT tasks_status_check CHECK (status::text = ANY (ARRAY['Asignada'::character varying, 'Revision'::character varying, 'Cumplida'::character varying, 'Cancelada'::character varying, 'Diferida'::character varying, 'Retardada'::character varying]::text[])),
CONSTRAINT tasks_type_check CHECK (type::text = ANY (ARRAY['Academico-Docente'::character varying, 'Administrativas'::character varying, 'Creacion intelectual'::character varying, 'Integracion-Social'::character varying, 'Administrativo-Docente'::character varying, 'Produccion'::character varying]::text[])))
WITH ( OIDS=FALSE);
ALTER TABLE public.tasks
OWNER TO postgres;
鉴于此表,我如何获取约束 tasks_status_check 和 task_type_check 的可用白名单值?
另外,我试图从 Laravel 中做到这一点,Laravel 创建约束而不是枚举。我已经研究了一段时间,但找不到解决方案
我是在 MySql 中完成的,但我们正在迁移到 PostgreSql
我的代码是这样的
trait EnumHelper {
public static function getEnumValues($field){
$instance = new static;
$type = DB::select(DB::raw('SHOW COLUMNS FROM '.$instance->getTable().' WHERE Field = "'.$field.'"'))[0]->Type;
preg_match('/^enum\((.*)\)$/', $type, $matches);
$values = array();
foreach(explode(',', $matches[1]) as $value){
$values[] = trim($value, "'");
}
return $values;
}
}
提前致谢
【问题讨论】:
标签: postgresql postgresql-9.4 laravel-5.5 php-7.1