为了账号安全,请及时绑定邮箱和手机立即绑定

Postgres 和 Laravel 如何将列从字符串类型更改为整数?

Postgres 和 Laravel 如何将列从字符串类型更改为整数?

PHP
茅侃侃 2023-08-11 17:55:05
我正在尝试将 Postgres 和 Laravel 6.x 上的列从字符串类型更改为整数。我尝试通过这样的迁移来做到这一点:    public function up()    {        Schema::table('job_listings', function (Blueprint $table) {            $table->integer('company_id')->change();        });    }当我运行此迁移时,出现错误,表明该列无法自动转换为整数:In Connection.php line 664:  SQLSTATE[42804]: Datatype mismatch: 7 ERROR:  column "company_id" cannot be cast automatically to type integer  HINT:  You might need to specify "USING company_id::integer". (SQL: ALTER TABLE job_listings ALTER company_id TYPE INT)In PDOStatement.php line 123:  SQLSTATE[42804]: Datatype mismatch: 7 ERROR:  column "company_id" cannot be cast automatically to type integer  HINT:  You might need to specify "USING company_id::integer".In PDOStatement.php line 121:  SQLSTATE[42804]: Datatype mismatch: 7 ERROR:  column "company_id" cannot be cast automatically to type integer  HINT:  You might need to specify "USING company_id::integer".在 PostgreSQL 中,我们如何指定 USING 将此列从字符串类型更改为整数类型?
查看完整描述

2 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

您必须指定显式转换,因为没有从文本或 varchar 到整数的隐式(自动)转换。我不知道 Laravel 函数来指定强制转换,因此我建议您使用原始 DB 语句来实现此目的。


你可以这样做:


public function up()

{

    DB::statement('ALTER TABLE job_listings ALTER COLUMN 

                  company_id TYPE integer USING (company_id)::integer');

}

在某些情况下,文本或 varchar 字段中可能存在空格,因此您必须在转换之前进行修剪


public function up()

{

    DB::statement('ALTER TABLE job_listings ALTER COLUMN 

                  company_id TYPE integer USING (trim(company_id))::integer');

}


查看完整回答
反对 回复 2023-08-11
?
Helenr

TA贡献1780条经验 获得超3个赞

即使表有行或没有行,它仍然返回该错误。因此,如果您不想要原始查询并且您的列没有值或有但不重要,只需删除列并创建新的列:


public function up()

{

    Schema::table('job_listings', function (Blueprint $table) {

        $table->dropColumn('company_id');

        $table->integer('company_id');

    });

}


查看完整回答
反对 回复 2023-08-11
  • 2 回答
  • 0 关注
  • 137 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信