php - 如何在 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');
});
}
如何将此字段类型从整数更改为布尔值?
解决方案
我用这种方式,它工作得很好
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;");
});
}
推荐阅读
- flutter - 颤振加载页面不起作用/路由功能不起作用
- kubernetes - Grafana 在 Kubernetes Slack Webhook 中运行错误 502
- python - 更改 Pandas 数据框中的值,但保留日期列
- c++ - boost::bimap 在使用自定义结构作为键时发现错误的条目,为什么?
- c# - 使用 where 子句获取数据
- java - SQLGrammarException:尝试从数据库中删除时无法执行语句
- java - 录制后清空文件并在 1-2 秒后关闭移动设备
- c - pset3 复数 - 候选人投票未更新 - CS50
- c++ - 将最新的 Visual Studio 安装到 Windows 7 - 安装程序退出且没有错误或警告
- python - 使用 Python 重叠 2 个 RGBA 图像