はじめに
タイトルの通りです。LaravelのマイグレーションファイルからmongoDBのコレクションを作成しようと思ったのですが生成されなかったので、その時の対処方法を備忘録として残そうと思います。
環境
- Laravel5.5
- PHP 7.x
- MongoDB 4.0.10
もう一つDBとして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();
});
}
}
これで Sample
コレクションが出来上がると思っていたのですが、何度確認してもコレクションが見当たりません。
対処
upメソッドのカラム記述のところが良くないみたいです。indexを貼るような記述にすると良いみたいです。
なぜindexじゃないとダメなのか分からないですが・・・
--- $collection->string('name');
+++ $collection->index('name');
このコードだと生成されたコレクションの_id
とname
にインデックスが貼られます。_id
にはデフォルトで付くみたいですね。
ここで、「デフォルトで付くならカラム定義の箇所ごっそり要らないやん」と思って削除してマイグレーションしてらコレクションは生成されませんでした。ナンデヤ・・・
_id
にだけindexを付ける場合は下記みたいにしっかり明記しないとダメみたいです。
$collection->index('_id');
まとめ
index使って記述すると良い
他に何か良い解決方法分かる方いましたら教えて下さい。
LaravelからMongoDBを触るのが始めてだったので、これの解決するのに結構時間取られちゃいました。
にしてもどうしてindexじゃないとダメなんだろう・・・。私、気になります!