当无法通过Laravel的迁移文件创建mongoDB集合时,可采取以下解决方法

首先

正如标题所示。我在Laravel的迁移文件中试图创建一个mongoDB的集合,但是却没有成功生成。因此,我打算将那时的解决方法作为备忘录记录下来。

生態

    Laravel5.5
    PHP 7.x
    MongoDB 4.0.10

虽然我们也使用了PostgreSQL作为另一个数据库,但在本文中并没有特别提及。

问题

以以下为例,创建迁移文件,并尝试运行 php artisan migrate 命令,但并未生成集合。

※ 在config/database.php文件中已经填写了MongoDB的相关信息。

class Sample extends Migration
{
    // MongoDBのコネクションを指定します
    protected $connection = 'mongodb';
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::connection($this->connection)
            ->table('Sample', function (Blueprint $collection)
            {
                $collection->string('name');
            });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::connection($this->connection)
            ->table('Sample', function (Blueprint $collection)
            {
                $collection->drop();
            });

    }
}

我本以为这样就能完成样品收藏,但无论我确认多少次,都没有找到收藏品。

处理 (duì chǔ)

似乎up方法的列描述部分不太好。看起来最好是使用插入索引的描述。虽然不知道为什么不能使用索引…

--- $collection->string('name');
+++ $collection->index('name');

在这段代码中,生成的集合中的_id和name字段会被添加索引。默认情况下,_id字段会自动添加索引。
在这里,我认为如果默认会添加的话,那么在列定义的部分就可以完全省去了,于是我删除了它并进行了迁移,但集合并没有被生成。这是怎么回事呢…

如果只对_id进行索引,必须明确指明为下列情况,否则不行的样子。

$collection->index('_id');

总结

如果使用索引进行描述会更好。
如果有其他好的解决方法,请告诉我。

由于我第一次使用Laravel接触MongoDB,所以花了相当长的时间来解决这个问题。但为什么非得使用索引不可呢… 这让我很好奇!

bannerAds