gpt4 book ai didi

mysql - 如何使用 Laravel 迁移交换两个索引字段?

转载 作者:行者123 更新时间:2023-11-29 16:46:12 24 4
gpt4 key购买 nike

在多对多关系的模型中,我不小心反向识别了外键名称。这是在两个相关模型中完成的,因此关系有效。它正在生产中。

文章中:

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

如果不成功,它可以预见地会遇到错误表“article_category_article”上没有名称为“temporarily”的列

将其分成 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');
});
}

关于mysql - 如何使用 Laravel 迁移交换两个索引字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53101949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com