php - 如何通过连接到另一个数据库中的表来删除模式?
问题描述
在我的 Laravel 应用程序中,我连接到不同的数据库,当我需要用新的虚拟数据更新每个数据库中的表时(我使用 php artisan migrate:fresh --seed
命令执行此操作) ,我总是遇到此错误
SQLSTATE [42S01]:基表或视图已存在:1050 表 'table_name' 已存在
这很奇怪,因为我down()
的迁移类中有方法
class CreateExampleTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::connection('conn2')->create('table_name', function (Blueprint $table) {
$table->bigIncrements('id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::connection('conn2')->dropIfExists('table_name');
}
}
解决方案
如果您使用migrate:refresh
而不是fresh
它将使用您的down()
方法回滚数据库。
我认为问题不在于您的问题,而在于您的问题down()
:up()
它正在尝试创建一个表,但是具有该名称的表已经存在。
我建议做类似的事情:
if (!Schema::hasTable('tbl_name')) {
// create table
}
您可能还必须指定在迁移中使用的数据库。
推荐阅读
- asp.net-mvc - IIS 8.5:服务应用程序池的进程'
' 遇到与 Windows 进程激活服务的致命通信错误 - python - 为什么我的 Python 只读取 csv 文件而不读取 xlsx 文件?
- visual-studio - HTML AgilityPack 问题 - Visual Basic - UTF-8
- javascript - 使用 AJAX Javascript 发送纯文本表单数据
- python - 稍后出现 if 子句时未引用 python 中的全局变量
- python - 无法分配“[{'id': '2'}]”:“Model .field”必须是“ForeignKey”实例
- seaborn - 在 seaborn 线图上为每个观察添加一个标记
- java - Spring boot builder模式实体到dto
- c++ - 找到循环系统中两个值之间最小差异的最佳方法?
- c# - 格式化列表内的值