Как преобразовать строку в логическое значение при миграции laravel?

Я хочу преобразовать поле из строки в логическое значение, используя этот код:

 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');
    });
}

как я могу изменить тип этого поля с целого на логический?


person Afshn    schedule 04.04.2021    source источник
comment
пожалуйста, поделитесь оригинальной миграцией   -  person OMR    schedule 04.04.2021
comment
Является ли тип БД postgresql? Это помогает? stackoverflow.com/questions/41149554/   -  person nice_dev    schedule 04.04.2021
comment
да, эта работа. Благодарю.   -  person Afshn    schedule 04.04.2021


Ответы (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;");
    });
}
person Afshn    schedule 04.04.2021