Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- C
- 20.04
- Laravel
- ubuntu
- Ubuntu 20.04
- 옵티머스g
- 맥
- 업비트
- 옵G
- 제주도
- 라즈베리파이
- 회고
- 셀레니움
- 우분투
- MySQL
- 라라벨
- 프레임워크
- 우분투 20.04
- FMS
- codeigniter
- 라즈비안
- php
- 옵티머스 g
- Selenium
- upbit
- TiL
- 옵지
- Raspberry Pi
- 맛집
- 코드이그나이터
Archives
- Today
- Total
평범한 이야기들
[TIL] PHP Laravel - Database #1 마이그레이션 본문
728x90
마이그레이션
테이블을 생성, 칼럼 추가, 인덱스와 키를 정의 하는 작업등을 데이터베이스 마이그레이션이라 부름
라라벨과 같은 모던 프레임워크에서는 마이그레이션 작업을 코드로 처리하는 기능 제공
마이그레이션 파일 생성
~ php artisan make:migration create_users_table
// 2개의 플래그존재 --create=table_name은 table_name이라는 테이블을 만드는 데 필요한 코드를 미리채워놓는다.
// --table=table_name 플래그는 기존 테이블에 대한 수정 작업을 위한 파일을 작성하 할 때 사용
~ php artisan make:migration add_votes_to_users_table --table=users
~ php artisan make:migration add_votes_to_users_table --create=users
Scheme 퍼사드의 create메서드를 이용해 테이블을 생성한
Schema::crate('users', function(Blueprint $table){
// Create columns here
$table->string('name'); // name 이라는 컬럼을 생성
});
컬럼 추가 / 생성
데이터 형에 따른 다양한 메서드가 존재한다.
- integer(colName) : Int형
- string(colName, length) : length 길이를 갖는 varchar형
- boolean(colName) : boolean 타입을 갖는 컬럼
- 그 외에도 다양한 데이터형에 맞게 존재 → 참고 (라라벨코리아 문서)
특수 메서드
- increments(colName) : integer 타입을 auto_increment 지정된 기본 키로 추가
- bigIncrements(colName) : BigInteger 타입을 auto_increment 지정된 기본 키로 추가 → id(colName)과 동일
- 그 외에도 여러개 존재 → 참고 (라라벨코리아 문서)
체이닝 형태로 구성해도 된다.
Schema::table('users',function(Blueprint $table){
$table->string('email')->nullable()->after('last_name');
});
테이블 삭제
// 테이블이 존재하면 삭제한다.
Schema::dropIfExists('users');
칼럼 수정
Schema::**table**('users',function(Blueprint $table){
$table->string('name',100)->change();
});
칼럼삭제
Schema::**table**('users',function(Blueprint $table){
$table->dropColumn('name');
});
// 배열로 전달하면 여러 개의 컬럼을 삭제 가능
Schema::**table**('users',function(Blueprint $table){
$table->dropColumn(['name','email']);
});
인덱스
인덱스 생성
$table->primary('primary_id'); // 기본 키, increments()를 사용한다면 불 필요
$table->primary(['first_name','last_name'); // 복합 키를 구성하는 경우
$table->unique('email'); // 유니크 인덱스 설정
$table->unique('email', 'optional_custom_index_name'); // 이름을 지정한 유니크 인덱스 설정
$table->index('email'); // 기본 인덱스 설정
$table->index('email', 'optional_custom_index_name'); // 이름을 지정한 기본 인덱스 설정
인덱스 삭제
$table->dropPrimary('contacts_id_primary');
$table->dropUnique('contacts_id_primary');
$table->dropIndex('contacts_id_primary');
외래 키
외래키 추가
// user_id 컬럼에 users 테이블의 id를 참조하는 외래 키 추가
$table->foreign('user_id')->references('id')->on('users');
//라라벨7이상에서
$table->foreignId('user_id')->constrained();
외래 키의 제약 지정
onUpdate() onDelete 메서드 이용
// 외래 키의 제약을 지정하는 방법
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
//라라벨7이상
$table->foreignId('user_id')->constrained()->onUpdate('cascade');
외래키삭제
// 인덱스의 이름(참조되는 칼럼의 이름과 테이블명을 기반으로 자동으로 생성) 지정해서 사용
$table->dropForeign('contacts_user_id_foreign');
// 참조하는 칼럼을 배열에 넣어서 삭제가능
$table->dropForeign(['user_id']);
마이그레이션 실행
~ php artisan migrate
마이그레이션의 up() 메서드 내용이 데이터베이스에 적용
기존에 적용한 내용은 제외 ( 즉 마이그레이션 내용을 DB에 저장해서 관리해줌)
그 외 마이그레이션 명령어 옵션
- migrate:install : 어떤 마이그레이션을 실행했는지 저장하는 테이블을 생성 - 마이그레이션을 실행할 때 자동으로 실행됨
- migrate:reset : 적용된 마이그레이션을 되돌린다.
- migrate:refresh : 적용된 전체 마이그레이션을 되돌린 후 다시 마이그레이션을 적용 (migrate:reset 후 migrate 한 것과 동일)
- migrate:fresh : 모든 테이블을 삭제하고 전체 마이그레이션을 다시 적용 ( refresh와 동일하지만 down()메서 내용을 실행하는 것이 아닌 테이블 삭제 후 up() 메서드 실행)
- migrate:rollback : 가장 최근에 적용한 마이그레이션 내용을 롤백함. —step=n 옵션으로 되돌릴 횟수를 지정 가능
- migrate:status : 모든 마이그레이션 목록을 보여줌
728x90
Comments