【Laravel】 마이그레이션 파일로부터 mongoDB의 컬렉션을 만들 수 없었을 때의 대처

4343 단어 PHPMongoDB라라벨

소개



제목대로입니다. 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');
    

    이 코드는 생성된 컬렉션의 _idname에 인덱스를 붙입니다. _id 에는 디폴트로 붙는 것 같네요.
    여기서, 「디폴트로 붙는다면 컬럼 정의의 개소 몰래 필요없다」라고 생각해 삭제해 마이그레이션 하면 컬렉션은 생성되지 않았습니다. 닌데 ...
    _id 에만 index를 붙이는 경우는 아래와 같이 확실히 명기하지 않으면 안되는 것 같습니다.
    $collection->index('_id');
    

    요약



    색인을 사용하여 작성하는 것이 좋습니다.
    그 밖에 뭔가 좋은 해결책 아시는 분 있으시면 가르쳐 주세요.

    Laravel에서 MongoDB를 만지기 시작했기 때문에 이것을 해결하는 데 상당히 시간이 걸렸습니다.
    하지만 왜 index가 아니면 안되겠지・・・. 나, 궁금해!

    좋은 웹페이지 즐겨찾기