Laravel에서 색인 생성 및 삭제
최근에는 인덱스를 만들거나 삭제할 때 인덱스 이름을 지정하는 방법이 아닙니다.
문서를 잘 보면 알 수 있습니다만, 여기에 주의점을 정리합니다.
여기에 나열된 샘플 코드는 마이그레이션 파일에 설명한다고 가정합니다.
만들기
테이블 정의 시 작성
Schema::create('books', function (Blueprint $table) {
$table->increments('id');
$table->string('title')->index(); # Index
$table->string('isbn')->unique(); # Create unique index
$table->integer('price');
$table->integer('author_id');
$table->timestamps();
});
이 예에서는 두 개의 색인을 작성합니다.
테이블의 컬럼 정의시에 작성한 인덱스의 이름은
${table_name}_${column_name}_${index_type}
와 같이 자동으로 생성됩니다.예를 들어 이 샘플 코드라면, 생성되는 인덱스의 이름은 각각
books_title_index
와 books_isbn_unique
입니다.index
, unique
메소드의 인수로서 캐릭터 라인을 건네주는 것으로, 인덱스명을 지정할 수가 있습니다.테이블 정의 후 작성
Schema::table('books', function (Blueprint $table) {
$table->index('title');
});
열 이름을 지정하여 만들 수 있습니다. 위와 같이, 이 때 작성되는 인덱스명은
${table_name}_${column_name}_${index_type}
입니다.두 번째 인수에 문자열을 전달하여 인덱스 이름을 지정할 수 있습니다.
복합 인덱스
Schema::table('author_book', function (Blueprint $table) {
$table->index(['author_id', 'book_id']);
});
복합 인덱스는, 인덱스의 대상의 컬럼명을 배열로 지정하는 것으로 작성할 수 있습니다.
삭제
삭제는 인덱스의 종류마다 메소드가 다릅니다.
일반 인덱스에는
dropIndex
, 고유 인덱스에는 dropUnique
를 사용합니다.건네주는 인수의 형태에 의해 삭제하는 대상의 인덱스가 다르므로 주의가 필요합니다.
문자열을 전달하면
지정한 캐릭터 라인과 같은 이름의 인덱스를 삭제한다.
컬럼명이 아니기 때문에 주의
$table->dropIndex('books_title_index');
문자열의 배열을 전달하면
대상 인덱스 이름 생성 규칙에서 만든 인덱스 이름을 삭제합니다.
$table->dropIndex(['title']);
이 예에서는
books_title_index
라는 인덱스를 삭제합니다.복수의 요소를 가지는 배열을 건네주었을 경우, 그 요소를 컬럼명으로 하는 복합 인덱스를 삭제합니다.
복합 인덱스의 경우, 배열로 지정한 컬럼의 순서가 인덱스명에도 영향을 주기 때문에, 삭제할 때에도 그 순서를 지킬 필요가 있습니다.
요약
문서를 잘 읽어 보자.
참고
Reference
이 문제에 관하여(Laravel에서 색인 생성 및 삭제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sato_ryu/items/311df38b81ab427447ca텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)