laravel database migrations
이 튜토리얼은 Laravel 데이터베이스 처리, 마이그레이션, 시딩, 원시 SQL 쿼리, Eloquent 모델, Eloquent Relationships, Artisan 및 Tinker에 대해 설명합니다.
의 이전 튜토리얼에서 Laravel 튜토리얼 시리즈 , 우리는 Laravel 프레임 워크의 아키텍처, 설치 및 구성 요소에 대해 배웠습니다. Laravel PHP 프로젝트 구조를 자세히 살펴 보았습니다.
이 튜토리얼에서는 Laravel 데이터베이스, 마이그레이션, 시딩, 원시 SQL 쿼리 실행, Eloquent 모델, Eloquent Relationships, Artisan 및 Tinker를 다룹니다. 모든 예제에서 Laravel 버전 7을 사용했습니다.
학습 내용 :
Laravel 데이터베이스 상호 작용
Laravel Framework는 다음을 사용하여 데이터베이스와 상호 작용합니다. 유창한 쿼리 빌더 인 원시 SQL, 그리고 Eloquent ORM . 다음 4 개의 데이터베이스를 지원합니다.
- MySQL 버전 5.6 이상
- PostgreSQL (Postgres) 버전 9.4 이상
- SQLite 버전 3.8.8 이상
- SQL Server 버전 2017+
프로젝트를 MySQL 데이터베이스에 연결하는 단계 :
1 단계: 새로 만들기 데이터 베이스 명명 된 db_ 학원 (적절한 이름을 사용할 수 있음) phpMyadmin 또는 HeidiSQL .
2 단계: 라는 새 프로젝트를 만듭니다. 학원 (적절한 이름을 사용할 수 있습니다).
노트 :Laravel을 설치하고 새 프로젝트를 생성하는 방법을 모르는 경우 이전 튜토리얼 인 Laravel Tutorial for Beginners 1을 참조하십시오.
3 단계 : IDE에서 프로젝트를 열고 .env 파일. 값 변경 DB_DATABASE (데이터베이스 이름) to db_ 아카데미 (적절한 이름을 사용할 수 있습니다). 둘 다 데이터베이스 이름 그리고 가치 DB_DATABASE 에 .env 파일은 동일해야합니다.
노트 : 데이터베이스 구성에 따라 .env 파일에서 DB_USERNAME, DB_PASSWOD 등과 같은 다른 데이터베이스 매개 변수를 변경해야 할 수 있습니다.
다음 스크린 샷은 .env 파일의 데이터베이스 구성을 보여줍니다.
Laravel 마이그레이션
Laravel Migration은 데이터베이스 테이블을 생성하는 데 사용되는 특수 기능입니다. 기본적으로 xxxx_xx_xx_xxxxxx _create_users_table.php 파일과 xxxx_xx_xx_xxxxxx _create_failed_jobs_table.php 파일이 포함되어 있습니다.
Laravel 마이그레이션의 구조
Laravel Migration 클래스는 다음 두 가지 방법을 사용합니다.
- up () 메서드 : 이 방법은 데이터베이스에 새 테이블, 열 또는 인덱스를 만드는 데 사용됩니다.
- down () 메서드 : 이 방법은 데이터베이스에서 기존 테이블, 열 또는 인덱스를 삭제하는 데 사용됩니다. 이 메서드는 up () 메서드의 반대 메서드입니다.
Laravel 마이그레이션 생성
명령 프롬프트에서 다음 명령을 실행하여 create_tutors_table .
php artisan make:migrationcreate_tutors_table
위의 명령을 실행하면 다음과 같은 파일이 생성됩니다. xxxx_xx_xx_xxxxxx_create_tutors_table.php 에 데이터베이스 / 마이그레이션 예배 규칙서.
열기 xxxx_xx_xx_xxxxxx_create_tutors_table.php 파일을 열고 아래와 같이 기존 코드를 수정합니다.
id(); $table->string('name'); $table->string('subject'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('tutors'); } }
Laravel 마이그레이션 실행
명령 프롬프트에서 다음 명령을 실행하여 사용 가능한 모든 마이그레이션을 실행합니다.
php artisan migrate
위의 명령은 아래와 같이 데이터베이스에 관련 테이블을 생성합니다.
마이그레이션 롤백
# 1) 마이그레이션의 마지막 배치 롤백
명령 프롬프트에서 다음 명령을 실행하여 마지막 마이그레이션 일괄 처리 (단일 또는 다중 마이그레이션이 포함될 수 있습니다).
php artisan migrate:rollback
# 2) 단계를 제공하는 마이그레이션 롤백
명령 프롬프트에서 다음 명령을 실행하여 마지막 두 번의 마이그레이션 .
php artisan migrate:rollback --step=2
# 3) 애플리케이션의 모든 마이그레이션 롤백
명령 프롬프트에서 다음 명령을 실행하여 모든 마이그레이션 롤백 응용 프로그램의.
php artisan migrate:reset
# 4) 단일 명령을 사용하여 롤백 및 마이그레이션
명령 프롬프트에서 다음 명령을 실행하여 롤백 및 마이그레이션 단일 명령을 사용합니다.
php artisan migrate:refresh
# 5) 롤백 및 마이그레이션 제한 번호. 마이그레이션
명령 프롬프트에서 다음 명령을 실행하여 마지막 두 마이그레이션 롤백 및 마이그레이션 단일 명령을 사용합니다.
php artisan migrate:refresh --step=2
# 6) 모든 테이블 삭제 및 마이그레이션
명령 프롬프트에서 다음 명령을 실행하여 모든 테이블을 삭제하고 마이그레이션 .
php artisan migrate:fresh
라 라벨 씨딩
애플리케이션을 개발할 때 애플리케이션을 테스트하려면 데이터가 필요합니다. 시딩은 테스트 데이터를 데이터베이스에 삽입하는 데 사용됩니다.
파종기 만들기
1 단계: 명령 프롬프트에서 다음 명령을 실행하여라는 시더를 만듭니다. UserSeeder .
php artisan make:seederUserSeeder
이 명령은 다음과 같은 파일을 생성합니다. UserSeeder.php 에 데이터베이스 / 시드 예배 규칙서.
2 단계: 열기 UserSeeder.php 파일을 열고 아래와 같이 기존 코드를 수정합니다.
insert(( 'name' => Str::random(5), 'email' => Str::random(5).'@user.com', 'password' => Hash::make('password'), )); } }
3 단계 : 열기 DatabaseSeeder.php 파일 에 데이터베이스 / 시드 아래에 표시된대로 기존 코드를 수정합니다.
call(UserSeeder::class); } }
노트 : DatabaseSeeder 클래스는 다른 시드 클래스를 호출하는 데 사용됩니다.
파종기 실행
1 단계: 명령 프롬프트에서 다음 명령을 실행하여 Composer의 오토로더 재생성 .
composer dump-autoload
2 단계: 명령 프롬프트에서 다음 명령을 실행하여 DatabaseSeeder 수업.
php artisan db:seed
위의 명령을 실행하는 대신 명령 프롬프트에서 다음 명령을 실행하여 UserSeeder 수업.
php artisan db:seed --class= UserSeeder
노트 : 명령 프롬프트에서 다음 명령을 실행하여 모든 테이블을 삭제하고 모든 마이그레이션을 다시 실행하십시오. .
php artisan migrate:fresh --seed
3 단계 : 삽입 된 데이터를 데이터베이스로 확인하십시오.
데이터베이스는 아래와 유사한 출력을 표시합니다.
원시 SQL 쿼리 실행
삽입 쿼리 실행
1 단계: 다음 코드 세그먼트를 route / web.php 새 레코드를 삽입 할 파일 교사 표.
Route::get('/insert', function () { DB::insert('insert into tutors(name,subject) values(?,?)',('Mr John','Computer Science')); });
2 단계: URL을 방문하십시오 : http : //academy.test/insert
3 단계 : 삽입 된 데이터를 데이터베이스로 확인하십시오.
데이터베이스는 다음 스크린 샷과 유사한 출력을 표시합니다.
선택 쿼리 실행
1 단계: 다음 코드 세그먼트를 route / web.php 데이터를 검색 할 파일 교사 가지고있는 테이블 신분증 같음 두 .
Route::get('/select',function(){ $tutors=DB::select('select * from tutors where id=?',(1)); foreach($tutors as $tutor) { echo $tutor->name.' is teaching '.$tutor->;subject; } });
2 단계: URL을 방문하십시오 : http : /academy.test/select
3 단계 : 브라우저는 다음 스크린 샷과 유사한 출력을 표시합니다.
업데이트 쿼리 실행
1 단계: 다음 코드 세그먼트를 route / web.php 파일에서 레코드를 업데이트합니다. 교사 가지고있는 테이블 신분증 같음 1 .
Route::get('/update', function(){ $tutors=DB::update('update tutors set name='Mr. Brown' where id=?',(1)); return $tutors; });
2 단계: 다음 URL을 방문하십시오. http : //academy.test/update
3 단계 : 데이터베이스로 업데이트 된 데이터를 확인하십시오.
데이터베이스는 아래 이미지와 유사한 출력을 표시합니다.
삭제 쿼리 실행
1 단계: 다음 코드 세그먼트를 route / web.php 파일에서 레코드를 삭제하려면 교사 가지고있는 테이블 신분증 같음 1 .
Route::get('/delete',function(){ $tutors=DB::delete('delete from tutors where id=?',(1)); return $tutors; });
2 단계: URL을 방문하십시오 : http : //academy.test/delete
3 단계 : 데이터베이스를 사용하여 삭제 된 데이터를 확인하십시오.
데이터베이스는 아래 이미지와 유사한 출력을 표시합니다.
Laravel Eloquent 모델
MVC 아키텍처에서 캐릭터 미디엄 약자 모델 . 모델은 애플리케이션에서 사용하는 데이터를 처리합니다. 모든 모델은 앱 예배 규칙서. 그만큼 사용자 모델 ( User.php) 기본 모델입니다. 데이터베이스의 각 테이블에는 해당 Eloquent 모델이있을 수 있습니다. 예 : Tutor 모델은 데이터를 저장 교사 표.
노트 : 별도로 지정하지 않는 한 클래스의 복수 이름이 테이블 이름으로 사용됩니다.
Eloquent 모델 생성
명령 프롬프트에서 다음 명령을 실행하여 가정 교사 .
php artisan make:model Tutor
이 명령은 다음과 같은 파일을 생성합니다. Tutor.php 에 앱 예배 규칙서.
위의 명령 대신 명령 프롬프트에서 다음 명령을 실행하여 데이터베이스 마이그레이션 모델을 만들 때.
php artisan make:modelTutor --migration
또는
php artisan make:modelTutor -m
위의 두 명령 모두 동일한 출력을 제공합니다.
데이터 삽입
1 단계: 다음 코드 세그먼트를 route / web.php 새 레코드를 삽입 할 파일 교사 표.
Windows 10을위한 최고의 무료 컴퓨터 클리너
Route::get('/insert-data',function(){ $tutor=new Tutor; $tutor->name='Mr George'; $tutor->subject='Mathematics'; $tutor->save(); });
노트 : 특성을 넣어“ App Tutor 사용 '에서 route / web.php 아래와 같이 파일.
2 단계: 다음 URL을 방문하십시오. http : //academy.test/insert-data
3 단계 : 삽입 된 데이터를 데이터베이스로 확인하십시오.
데이터베이스는 아래 이미지와 유사한 출력을 표시합니다.

데이터 찾기
Windows 10을위한 최고의 무료 DVD 리퍼
1 단계: 다음 코드 세그먼트를 route / web.php 파일에서 레코드를 찾거나 검색합니다. 교사 가지고있는 테이블 신분증 같음 두 .
Route::get('/find-data',function(){ $tutor=Tutor::find(2); return $tutor->name; });
2 단계: 다음 URL을 방문하십시오. http : //academy.test/find-data
3 단계 : 브라우저는 아래 이미지와 유사한 출력을 표시합니다.

데이터 업데이트
1 단계: 다음 코드 세그먼트를 route / web.php 파일에서 레코드를 업데이트합니다. 교사 가지고있는 테이블 신분증 같음 두 .
Route::get('/update-data',function(){ $tutor=Tutor::find(2); $tutor->name='Ms Georgina'; $tutor->subject='Computer Science'; $tutor->save(); });
또는
Route::get('/update-data',function(){ Tutor::where('id',2)-> update(('name'=>'Ms Georgina','subject'=>'Computer Science')); });
2 단계: 다음 URL을 방문하십시오. http : //academy.test/update-data
3 단계 : 데이터베이스로 업데이트 된 데이터를 확인하십시오.
데이터베이스는 아래 이미지와 유사한 출력을 표시합니다.

데이터 삭제
1 단계: 다음 코드 세그먼트를 route / web.php 파일에서 레코드를 삭제하려면 교사 가지고있는 테이블 신분증 같음 두 .
Route::get('/delete-data',function(){ $tutor=Tutor::find(2); $tutor->delete(); });
2 단계: 다음 URL을 방문하십시오. http : //academy.test/delete-data
3 단계 : 데이터베이스를 사용하여 삭제 된 데이터를 확인하십시오.
데이터베이스는 아래 이미지와 유사한 출력을 표시합니다.

소프트 삭제 데이터
데이터베이스에서 데이터를 삭제하는 대신 소프트 삭제는 deleted_at 모델에서 데이터베이스 테이블에 삽입하십시오.
소프트 삭제를 활성화하려면 다음 특성을 사용하십시오.
Illuminate Database Eloquent SoftDeletes
다음 코드 세그먼트는 데이터를 소프트 삭제하는 데 사용할 수 있습니다.
Route::get('/soft-delete-data',function(){ Tutor::find(1)->delete(); });
소프트 삭제 데이터 가져 오기
그만큼 withTrashed () 방법을 사용할 수 있습니다 소프트 삭제 데이터 가져 오기 아래 그림과 같이.
Route::get('/read-soft-delete-data',function(){ $tutor=Tutor::withTrashed()->where('id',1)->get(); return $tutor; });
소프트 삭제 데이터 복원
그만큼 복원() 방법을 사용할 수 있습니다 일시 삭제 데이터 복원 아래 그림과 같이.
Route::get('/restore-data',function(){ Tutor::withTrashed()->where('id',1)->restore(); });
영구적으로 데이터 삭제
그만큼 forceDelete () 방법을 사용할 수 있습니다 영구적으로 데이터 삭제 아래 그림과 같이.
Route::get('/force-delete-data',function(){ Tutor::onlyTrashed()->forceDelete(); });
Laravel Eloquent 관계
유창한 관계는 데이터베이스 테이블을 쉽게 연결하는 데 도움이됩니다.
오래된 관계 유형
다음 목록은 다양한 유형의 웅변적인 관계를 보여줍니다.
- 일대일 관계
- 일대 다 관계
- 다 대다 관계
- Has-one-through 관계
- Has-many-through 관계
- 일대일 (다형성) 관계
- 일대 다 (다형) 관계
- 다 대다 (다형) 관계
# 1) 일대일 관계
기술: 다른 테이블의 열 간의 일대일 관계입니다.
일대일 관계 예 :
hasOne('AppBook); } }
일대일 관계 (역) 예 :
belongsTo('App Author); } }
# 2) 일대 다 관계
기술: 이러한 유형의 관계에서 한 모델은 여러 다른 모델을 소유합니다.
일대 다 관계 예 :
hasMany('AppReview'); } }
일대 다 관계 (역) 예 :
belongsTo('AppTutorial'); } }
# 3) 다 대다 관계
기술: 일대일 및 일대 다 관계보다 더 복잡한 관계이며 이러한 관계를 정의하려면 피벗 테이블을 만들어야합니다.
다 대다 관계 예 :
belongsToMany('AppBook); } }
다 대다 (역) 관계 예 :
belongsToMany('AppAuthor); } }
# 4) Has-One-Through 관계
기술: 단일 중간 관계를 통해 모델을 연결합니다.
Has-one-through 관계 예 :
hasOneThrough('AppOwner', 'AppCar'); } }
# 5) Has-Many-Through 관계
기술: 쉬운 방법으로 원거리 또는 중간 관계에 액세스 할 수 있습니다.
Has-many-through 관계 예 :
hasManyThrough('AppBook, 'AppAuthor); } }
# 6) 일대일 (다형성) 관계
기술: 일대일 관계와 유사하지만 대상 모델은 단일 연관에서 둘 이상의 모델 유형에 속할 수 있습니다.
일대일 (다형성) 관계 예 :
morphTo(); } } class Article extends Model { /** * Get the article's image. */ public function image() { return $this->morphOne('AppImage', 'imageable'); } } class Author extends Model { /** * Get the author's image. */ public function image() { return $this->morphOne('AppImage', 'imageable'); }
# 7) 일대 다 (다형성) 관계
기술: 일대 다 관계와 유사하지만 대상 모델은 단일 연관에서 둘 이상의 모델 유형에 속할 수 있습니다.
일대 다 (다형성) 관계 예 :
morphTo(); } } class Article extends Model { /** * Get all of the article's comments. */ public function comments() { return $this->morphMany('AppComment', 'commentable'); } } class Audio extends Model { /** * Get all of the audio’s comments. */ public function comments() { return $this->morphMany('AppComment', 'commentable'); } }
# 8) 다 대다 (다형성) 관계
기술: 이 유형의 관계에서 대상 모델에는 다른 모델간에 공유 할 수있는 고유 한 레코드가 있습니다.
다 대다 (다형) 관계 예 :
morphToMany('AppComment, commentable); } }
라 라벨 장인
이전 튜토리얼에서 우리는 장인 이다 명령 줄 인터페이스 ( CLI ).
장인 명령
사용 가능한 모든 항목을 보려면 명령 프롬프트에서 다음 명령을 실행하십시오. 장인의 명령 .
php artisan
다음 스크린 샷은 위 명령의 출력을 보여줍니다.

다음 표는 위 명령 (php artisan)의 출력에서 가져온 각 기능과 함께 중요한 artisan 명령 중 일부를 보여줍니다.
명령 기능성 캐시 : 지우기 응용 프로그램 캐시 플러시 도움 명령에 대한 도움말을 표시합니다. 명부 명령을 나열합니다. 마이그레이션 데이터베이스 마이그레이션 실행 테스트 애플리케이션 테스트 실행 땜장이 애플리케이션과 상호 작용 auth : clear-resets 만료 된 암호 재설정 토큰 플러시 db : seed 레코드로 데이터베이스에 시드 이벤트 : 목록 애플리케이션의 이벤트 및 리스너 나열 키 : 생성 애플리케이션 키 설정 make : channel 새 채널 클래스 만들기 만들기 : 구성 요소 새보기 구성 요소 클래스 만들기 make : controller 새 컨트롤러 클래스 만들기 make : event 새 이벤트 클래스 만들기 만들기 : 공장 새 모델 팩토리 생성 make : listener 새 이벤트 리스너 클래스 만들기 make : mail 새 이메일 수업 만들기 make : 미들웨어 새로운 미들웨어 클래스 생성 만들기 : 마이그레이션 새 마이그레이션 파일 만들기 모형을 만들다 새로운 Eloquent 모델 클래스 생성 make : notification 새 알림 클래스 만들기 만들기 : 관찰자 새 관찰자 클래스 만들기 make : policy 새 정책 클래스 만들기 make : provider 새 서비스 공급자 클래스 만들기 make : resource 새 리소스 만들기 make : seeder 새 시더 클래스 만들기 make : test 새 테스트 클래스 만들기 마이그레이션 : 새로 모든 테이블을 삭제하고 모든 마이그레이션을 다시 실행하십시오. 마이그레이션 : 새로 고침 모든 마이그레이션 재설정 및 다시 실행 마이그레이션 : 재설정 모든 데이터베이스 마이그레이션 롤백 마이그레이션 : 롤백 마지막 데이터베이스 마이그레이션 롤백 알림 : 표 알림 테이블에 대한 마이그레이션 만들기 경로 : 목록 등록 된 모든 경로 나열 저장 : 링크 응용 프로그램에 대해 구성된 심볼릭 링크 만들기
라 라벨 팅커
Tinker는 명령 줄에서 응용 프로그램과 상호 작용할 수있는 REPL (READ-EVAL-PRINT-LOOP)입니다. 땜장이 경로를 등록하지 않고 데이터베이스와 상호 작용합니다.
Artisan과 함께 Tinker를 사용하며 기본적으로 포함됩니다.
Tinker 환경 활성화
명령 프롬프트에서 다음 명령을 실행하여 Tinker 환경을 활성화합니다.
php artisan tinker
다음 스크린 샷은 위 명령의 출력을 보여줍니다.

Tinker로 데이터 삽입
명령 프롬프트에서 다음 명령을 실행하여 새 레코드를 사용자 표.
$user = new AppUser; $user->name = 'User A'; $user->email = 'usera@user.com'; $user->password = 'user123'; $user->save();
데이터베이스는 다음 스크린 샷과 유사한 출력을 표시합니다.

Tinker로 데이터 찾기
명령 프롬프트에서 다음 명령을 실행하여 레코드가있는 레코드를 찾거나 검색합니다. 신분증 동일 두 에 사용자 표.
$user = AppUser::find(2);
명령 프롬프트는 다음 스크린 샷과 유사한 출력을 표시합니다.

Tinker로 데이터 업데이트
명령 프롬프트에서 다음 명령을 실행하여 신분증 동일 두 에 사용자 표.
$user = AppUser::find(2); $user->name = 'User B'; $user->email = 'userb@user.com'; $user->save();
데이터베이스는 다음 스크린 샷과 유사한 출력을 표시합니다.

Tinker로 데이터 삭제
명령 프롬프트에서 다음 명령을 실행하여 신분증 동일 두 에 사용자 표.
$user = AppUser::find(2); $user->delete();
데이터베이스는 다음 스크린 샷과 유사한 출력을 표시합니다.

결론
Laravel Framework는 원시 SQL, 유창한 쿼리 작성기 및 Eloquent ORM을 사용하여 데이터베이스와 상호 작용합니다. 모델은 애플리케이션에서 사용하는 데이터를 처리합니다. 유창한 관계는 데이터베이스 테이블을 쉽게 연결하는 데 도움이됩니다.
마이그레이션은 데이터베이스 테이블을 만드는 데 사용되는 특수 기능입니다. Seeding은 개발자가 개발할 때 응용 프로그램을 테스트하기 위해 데이터가 필요하므로 개발자에게 매우 유용한 테스트 데이터를 데이터베이스에 삽입하는 데 사용됩니다. Tinker는 경로를 등록하지 않고 데이터베이스와 상호 작용합니다.
이 튜토리얼이 도움이 되었기를 바랍니다. 다음 자습서에서는 양식, 파일 업로드, 인증, 이메일 보내기, 세션 등에 대해 설명합니다.
즐거운 학습 되세요!
추천 도서