Qiita Conference 2025

tenntenn (@tenntenn)

好奇心を原動力に行動するソフトウェアエンジニアになるために

2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Laravel】マイグレーションファイルからmongoDBのコレクションが作れなかった時の対処

Last updated at Posted at 2019-06-13

はじめに

タイトルの通りです。LaravelのマイグレーションファイルからmongoDBのコレクションを作成しようと思ったのですが生成されなかったので、その時の対処方法を備忘録として残そうと思います。

環境

  • Laravel5.5
  • PHP 7.x
  • MongoDB 4.0.10

もう一つDBとしてpostgreSQLも使用していましたが、今回の記事では特に記述しません。

問題

例として下記のようなマイグレーションファイルを作って、php artisan migrateコマンドを動かしてみたところ、コレクションが生成されない:cold_sweat:

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

このコードだと生成されたコレクションの_idnameにインデックスが貼られます。_idにはデフォルトで付くみたいですね。
ここで、「デフォルトで付くならカラム定義の箇所ごっそり要らないやん」と思って削除してマイグレーションしてらコレクションは生成されませんでした。ナンデヤ・・・

_idにだけindexを付ける場合は下記みたいにしっかり明記しないとダメみたいです。

$collection->index('_id');

まとめ

index使って記述すると良い
他に何か良い解決方法分かる方いましたら教えて下さい。:bow_tone1:

LaravelからMongoDBを触るのが始めてだったので、これの解決するのに結構時間取られちゃいました。
にしてもどうしてindexじゃないとダメなんだろう・・・。私、気になります!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Qiita Conference 2025 will be held!: 4/23(wed) - 4/25(Fri)

Qiita Conference is the largest tech conference in Qiita!

Keynote Speaker

ymrl、Masanobu Naruse, Takeshi Kano, Junichi Ito, uhyo, Hiroshi Tokumaru, MinoDriven, Minorun, Hiroyuki Sakuraba, tenntenn, drken, konifar

View event details
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?