当无法通过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,所以花了相当长的时间来解决这个问题。但为什么非得使用索引不可呢… 这让我很好奇!