【问题标题】:Add new column to users table via migration wont take effect通过迁移向用户表添加新列不会生效
【发布时间】:2021-01-29 03:49:36
【问题描述】:

我正在尝试向现有集合添加一列。我正在使用 MongoDB 我正在运行以下迁移:

<?php

use Illuminate\Database\Migrations\Migration;

class AddLocaleColumn extends Migration
{
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('users', function ($table) {
        $table->string('locale')->default(config('app.locale'));
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::table('users', function ($table) {
        $table->dropColumn('locale');
    });
}

}

当我执行“php artisan migrate”时,我得到的响应很好:

php artisan migrate
Migrating: 2020_01_01_000000_add_locale_column
Migrated:  2020_01_01_000000_add_locale_column

当我去“ro​​bomongo 3t studio”验证新列是否已创建时,我看不到它

我错过了什么吗?我是 mongodb 和 laravel 的新手,我对我如此赤裸裸。

【问题讨论】:

  • 乍一看一切正常...DESCRIBE users 是有效的 MongoDB 命令吗?那(或等效的,不知道 Mongo 语法抱歉)应该列出 users 表的列。
  • iam 也使用这个 mongodb 命令来检查新列是否存在: db.users.find({ 'locale' : { '$exists' : true }}).pretty();但这也会返回否定结果
  • 嗯...嗯,我觉得一切正常。你确定你检查的是正确的数据库吗?如果你再次运行php artisan migrate 会发生什么? (应该说“无迁移”)
  • 是的,这正是我再次尝试时得到的结果
  • 表示迁移成功。您在SELECT * FROM migrations 中看到迁移了吗? 2020_01_01_000000_add_locale_column 应该有一行(最近的)

标签: php laravel mongodb migration


【解决方案1】:

MongoDB 在集合中没有列(或任何模式)。 单个文档可能有多个字段,并且字段集可能因文档而异。

“将列添加到集合”的操作在 MongoDB 中没有意义。您只能将特定字段的添加到单个文档中。

同理,在使用 MongoDB 时,您一般不需要或运行迁移来调整架构,您可以随时插入任何您喜欢的字段。

数据迁移是不同的,是 MongoDB 上下文中迁移的有效用例。)

【讨论】:

  • 那么,如果我想用一个新字段更新现有集合,同时用该集合的每个文档的数据填充该字段,我该怎么办
  • 您可以为此使用迁移。
  • 你知道吗?
  • 那是一个单独的问题。
猜你喜欢
  • 2014-12-26
  • 2021-09-11
  • 2021-05-13
  • 2013-05-23
  • 2017-10-18
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
相关资源
最近更新 更多