如何在 laravel 迁移中将字符串转换为布尔值?

Posted

技术标签:

【中文标题】如何在 laravel 迁移中将字符串转换为布尔值?【英文标题】:How to convert string to boolean in laravel migration? 【发布时间】:2021-06-30 12:02:42 【问题描述】:

我想将字段从字符串转换为布尔值 试试这段代码:

 public function up()

    Schema::table('users', function (Blueprint $table) 
        $table->boolean('email_permission')->change();
        $table->boolean('sms_permission')->change();
    );


/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()

    Schema::table('users', function (Blueprint $table) 
        //
    );

但我得到了下面的错误

Doctrine\DBAL\Driver\PDOException::("SQLSTATE[42804]: Datatype mismatch: 7 ERROR:  column 
"email_permission" cannot be cast automatically to type boolean
HINT:  You might need to specify "USING email_permission::boolean".")

这是原始迁移:

   public function up()

    Schema::table('users', function (Blueprint $table) 
        $table->string('email_permission')->nullable()->default('0');
        $table->string('sms_permission')->nullable()->default('0');
    );


/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()

    Schema::table('users', function (Blueprint $table) 
        $table->dropColumn('email_permission');
        $table->dropColumn('sms_permission');
    );

如何将此字段类型从整数更改为布尔值?

【问题讨论】:

请分享原始迁移 数据库类型是postgresql吗?这有帮助吗? ***.com/questions/41149554/… 是的,这项工作。谢谢。 【参考方案1】:

我用这种方式,效果很好

 public function up()

    Schema::table('users', function (Blueprint $table) 
        DB::statement("ALTER TABLE users 
          ALTER COLUMN email_permission DROP DEFAULT,
          ALTER COLUMN email_permission TYPE BOOLEAN USING email_permission::BOOLEAN,
          ALTER COLUMN email_permission SET DEFAULT FALSE;");
    );

【讨论】:

以上是关于如何在 laravel 迁移中将字符串转换为布尔值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Postgres 中将布尔数组转换为单个布尔值或单个字符串

如何在 Go 中将布尔值转换为字符串?

在javascript中将字符串转换为布尔值[重复]

如何将 Postgresql 布尔值转换为 MySQL Tinyint?

如何在Java中将二维布尔数组转换为一维字节数组?

如何使用 PHP 在 Laravel 7 中将 PascalCase 字符串转换为可用的 slug?