mysql - 如何使用 laravel 迁移交换两个索引字段?
问题描述
在多对多关系模型中,我意外地反向识别了外键名称。这是在两个相关模型中完成的,因此关系有效。它正在生产中。
在Articles
:
public function categories()
{
return $this->belongsToMany(ArticleCategory::class, 'article_category_article', 'article_category_id', 'article_id');
}
并在ArticleCategory
:
public function articles()
{
return $this->belongsToMany(Article::class, 'article_category_article', 'article_id', 'article_category_id');
}
如您所见,两个外键都是相反的。
它不会打扰我,因为它在整个项目中都有效。在article_category_article
表中,两个值都记录在“错误”列中。
但是如果我想换掉它怎么办。模型很简单,但是数据透视表呢?我尝试过 laravel 迁移:
public function up()
{
Schema::table('article_category_article', function (Blueprint $table) {
$table->renameColumn('article_id', 'temporarily');
$table->renameColumn('article_category_id', 'article_id');
$table->renameColumn('temporarily', 'article_category_id');
});
}
没有成功,它可以预见地会遇到错误There is no column with name 'temporarily' on table 'article_category_article'
将其拆分为 2 个迁移文件会遇到相同的错误。
我有顺其自然的倾向。问题是:能做到吗?我认为交换 MySQL 中的列(没有迁移),重新索引表并调整模型是可能的。有任何想法吗?我可以在本地服务器上测试它。
解决方案
两个单独的查询对我有用:
public function up()
{
Schema::table('article_category_article', function (Blueprint $table) {
$table->renameColumn('article_id', 'temporarily');
$table->renameColumn('article_category_id', 'article_id');
});
Schema::table('article_category_article', function (Blueprint $table) {
$table->renameColumn('temporarily', 'article_category_id');
});
}
推荐阅读
- scala - 如何最有效地在scala中合并和聚合2个地图?
- python - 按类 INSTAGRAM、selenium python 复制标题
- ruby-on-rails - 短信网关的 Fedena 短信设置
- sql-server - SELECT 语句返回 DATETIME 之外的行
- python - 无法在 Python 中使用 h2o 导入文件
- awk - 如何关联数据以使用 awk 执行命令操作?
- github - GitHub 如何猜测文件的编码?
- c# - 如何打印每行打印在新页面中的datagridview?
- c# - 作为国家的演员表:列表
- php - PHP $_FILES 不使用所有文件输入