【Laravel】 마이그레이션 파일로부터 mongoDB의 컬렉션을 만들 수 없었을 때의 대처
소개
제목대로입니다. Laravel의 마이그레이션 파일에서 mongoDB의 컬렉션을 만들려고했는데 생성되지 않았기 때문에 그 때의 대처 방법을 비망록으로 남기려고 생각합니다.
환경
또 하나 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');
요약
색인을 사용하여 작성하는 것이 좋습니다.
그 밖에 뭔가 좋은 해결책 아시는 분 있으시면 가르쳐 주세요.
Laravel에서 MongoDB를 만지기 시작했기 때문에 이것을 해결하는 데 상당히 시간이 걸렸습니다.
하지만 왜 index가 아니면 안되겠지・・・. 나, 궁금해!
Reference
이 문제에 관하여(【Laravel】 마이그레이션 파일로부터 mongoDB의 컬렉션을 만들 수 없었을 때의 대처), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hirorin/items/be2b84ef80b9ea8998bf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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();
});
}
}
up 메소드의 컬럼 기술의 곳이 좋지 않은 것 같습니다. index를 붙이는 것 같은 기술로 하면 좋은 것 같습니다.
왜 index가 아니면 안되는지 모르겠습니다만・・・
--- $collection->string('name');
+++ $collection->index('name');
이 코드는 생성된 컬렉션의
_id
및 name
에 인덱스를 붙입니다. _id
에는 디폴트로 붙는 것 같네요.여기서, 「디폴트로 붙는다면 컬럼 정의의 개소 몰래 필요없다」라고 생각해 삭제해 마이그레이션 하면 컬렉션은 생성되지 않았습니다. 닌데 ...
_id
에만 index를 붙이는 경우는 아래와 같이 확실히 명기하지 않으면 안되는 것 같습니다.$collection->index('_id');
요약
색인을 사용하여 작성하는 것이 좋습니다.
그 밖에 뭔가 좋은 해결책 아시는 분 있으시면 가르쳐 주세요.
Laravel에서 MongoDB를 만지기 시작했기 때문에 이것을 해결하는 데 상당히 시간이 걸렸습니다.
하지만 왜 index가 아니면 안되겠지・・・. 나, 궁금해!
Reference
이 문제에 관하여(【Laravel】 마이그레이션 파일로부터 mongoDB의 컬렉션을 만들 수 없었을 때의 대처), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hirorin/items/be2b84ef80b9ea8998bf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【Laravel】 마이그레이션 파일로부터 mongoDB의 컬렉션을 만들 수 없었을 때의 대처), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hirorin/items/be2b84ef80b9ea8998bf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)