반응형
인덱스가 Laravel 마이그레이션에 있는지 확인하려면 어떻게 해야 합니까?
마이그레이션을 준비할 때 테이블에 고유 인덱스가 있는지 확인하려고 하면 어떻게 수행할 수 있습니까?
Schema::table('persons', function (Blueprint $table) {
if ($table->hasIndex('persons_body_unique')) {
$table->dropUnique('persons_body_unique');
}
})
위와 같이 생긴 것.(분명히 hasIndex()가 없습니다.)
라라벨이 사용하는 "docrine-dbal"을 사용하는 것이 더 나은 해결책입니다.
Schema::table('persons', function (Blueprint $table) {
$sm = Schema::getConnection()->getDoctrineSchemaManager();
$indexesFound = $sm->listTableIndexes('persons');
if(array_key_exists("persons_body_unique", $indexesFound))
$table->dropUnique("persons_body_unique");
});
mysql 쿼리
SHOW INDEXES FROM persons
테이블의 모든 인덱스를 반환하지만 이름 이외의 추가 정보가 포함됩니다.내 설정에서 이름이 포함된 열은 다음과 같이 호출됩니다.Key_name
키 이름 모음을 가져오겠습니다.
collect(DB::select("SHOW INDEXES FROM persons"))->pluck('Key_name')
그리고 이것은 당신이 사용할 수 있습니다.contains
그래서 마침내 우리는 다음을 얻었습니다.
if (collect(DB::select("SHOW INDEXES FROM persons"))->pluck('Key_name')->contains('persons_body_unique')) {
$table->dropUnique('persons_body_unique');
}
간단한 형태로, 당신은 이것을 할 수 있습니다.
Schema::table('persons', function (Blueprint $table) {
$index_exists = collect(DB::select("SHOW INDEXES FROM persons"))->pluck('Key_name')->contains('persons_body_unique');
if ($index_exists) {
$table->dropUnique("persons_body_unique");
}
})
언급URL : https://stackoverflow.com/questions/45882990/how-can-indexes-be-checked-if-they-exist-in-a-laravel-migration
반응형
'programing' 카테고리의 다른 글
openpyxl을 사용하여 범위의 모든 셀에 테두리 적용 (0) | 2023.09.02 |
---|---|
gdb: gdb를 종료하지 않고 프로그램을 종료합니다. (0) | 2023.09.02 |
Android Studio에서 데이터베이스 파일의 내용 보기 (0) | 2023.09.02 |
C++ 및 g++을 사용하여 mysql.h에서 출력을 가져오는 동안 오류가 발생했습니다. (0) | 2023.09.02 |
내부 조인 동일 테이블 (0) | 2023.09.02 |