在多对多关系的模型中,我意外地用相反的方式标识了外键名。这是在两个相关的模型中完成的,因此关系是有效的。它正在生产中。
在 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
表两个值都记录在“错误”列中。
但如果我想交换呢。模型很简单,但是透视表呢?我尝试过一次拉维尔迁移:
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'
将其拆分为两个迁移文件会遇到相同的错误。
我倾向于顺其自然。问题是:能做到吗?我假设在mysql中交换列(不迁移)、重新索引表和调整模型是可能的。有什么想法吗?我可以在本地服务器上测试。
1条答案
按热度按时间bfnvny8b1#
两个独立的查询对我有用: