【问题标题】:How to swap two indexed fields with laravel migrations?如何使用 laravel 迁移交换两个索引字段?
【发布时间】:2019-04-05 17:12:28
【问题描述】:

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

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 表中,两个值都记录在“错误”列中。

但是 if 我还是想换掉它。模型很简单,但是数据透视表呢?我尝试过 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 个迁移文件会遇到相同的错误。

我倾向于顺其自然。问题是:可以做到吗?我假设交换列 inside MySQL(没有迁移),重新索引表和 适应模型是一种可能性。有任何想法吗?我可以在本地服务器上进行测试。

【问题讨论】:

    标签: mysql laravel laravel-5 laravel-migrations


    【解决方案1】:

    两个单独的查询对我有用:

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

    【讨论】:

      猜你喜欢
      • 2022-11-27
      • 2020-09-15
      • 2021-10-22
      • 2016-03-25
      • 2019-03-20
      • 2017-01-29
      • 2013-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多