使用Postgres定义Laravel 5.5迁移中的字段

时间:2017-11-17 16:25:35

标签: php postgresql laravel migration

使用Postgres的Laravel 5.5迁移:

1)将字段定义为:

$table->enum('is_applied', ['Y', 'N']) ->comment('Y => is_applied, N=> Is not applied');

我在下面的生成表中看到了:

is_applied varchar(255) NOT NULL,
    CONSTRAINT cs_tmp_csvps_is_applied_check CHECK (((is_applied)::text = ANY ((ARRAY['Y'::character varying, 'N'::character varying])::text[]))),

实际上我想得到我在Postgres中使用的sql类型:

CREATE TYPE type_cms_item_content_type AS ENUM (
    'P',
    'M',
    'H'
);

    content_type type_cms_item_content_type NOT NULL DEFAULT 'P'::type_cms_item_content_type,

有可能吗?

2)将字段定义为:

$table->timestamps();

我创建了2个字段created_at和updated_at。 因为我只需要创建created_at,我可以写:

$table->dateTime('created_at');

但是有一种方法可以在服务器上设置默认时间,例如:

created_at timestamp NOT NULL DEFAULT now(),

谢谢!

2 个答案:

答案 0 :(得分:1)

你可以这样做:

$table->timestamp('created_at')->useCurrent();

表示时间戳问题。如果你真的想要更改sql,你总是可以在迁移中执行原始的sql语句:

Schema::table('content_type', function(Blueprint $table){
    $sql = 'CREATE TYPE type_cms_item_content_type AS ENUM (
    `P`,
    `M`,
    `H`
);

    content_type type_cms_item_content_type NOT NULL DEFAULT `P`::type_cms_item_content_type';
    DB::connection()->getPdo()->exec($sql);
});

答案 1 :(得分:1)

1)将字段定义为:

[RoutePrefix("companies")]

方法$table->enum('is_applied', ['Y', 'N']) ->comment('Y => is_applied, N=> Is not applied'); 只适用于MySQL,在Laravel上迁移。

有关详情,请参阅:https://laravel.com/docs/5.5/migrations#creating-columns

2)将字段定义为:

@ alex-harris的答案是一个gob选项

comment()

有关详细信息,请参阅:https://laravel.com/docs/5.5/migrations#column-modifiers