데이터베이스 마이그레이션
ㅋㅋ
- 데이터 테이블 생성
- 데이터 테이블 이름 바꾸기/삭제
- 필드필드 수정
- 필드 수정Index
- 색인 만들기
- 소개마이그레이션은 팀이 간단하고 쉽게 애플리케이션의 데이터베이스 테이블 구조를 편집하고 공유할 수 있도록 하는 데이터베이스 버전 제어와 유사합니다. 마이그레이션은 일반적으로 Laravel의 데이터베이스 구조 생성기와 함께 사용됩니다. 데이터베이스 구조를 쉽게 구축할 수 있습니다. 동료에게 데이터베이스 구조에 필드를 수동으로 추가하도록 요청해야 했던 경우 데이터베이스 마이그레이션을 사용하면 그러한 작업을 수행할 필요가 없습니다.
- Laravel의 파사드는 Laravel이 지원하는 모든 데이터베이스 시스템에 대한 데이터 테이블 생성 및 운영에 대한 해당 지원을 제공합니다.
마이그레이션 생성
Artisan 명령어
make:migration
을 사용하여 마이그레이션을 생성하세요.make:migration
来创建迁移。php artisan make:migration create_users_table
新的迁移位于
database/migrations
目录下。每个迁移文件名都包含时间戳,以便让 Laravel 确认迁移的顺序。--table
和--create
选项可用来指定数据表的名称,或是该迁移被执行时是否将创建的新数据表。这些选项需在预生成迁移文件时填入指定的数据表:php artisan make:migration create_users_table --create=users php artisan make:migration add_votes_to_users_table --table=users
如果你想要指定生成迁移指定一个自定义输出路径,则可以在运行
make:migration
命令时添加--path
选项,给定的路径必须是相对于应用程序的基本路径。迁移结构
迁移类通常会包含 2 个方法:
up
和down
。up
方法用于添加新的数据表, 字段或者索引到数据库, 而down
方法就是up
方法的反操作,和up
里的操作相反。在这 2 个方法中都要用到 Laravel 的
Schema
构建器来创建和修改表,
若要了解Schema
生成器中的所有可用方法 ,可以查看它的文档。比如,创建flights
表的简单示例:<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateFlightsTable extends Migration{ /** * 运行数据库迁移 * * @return void */ public function up() { Schema::create('flights', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('airline'); $table->timestamps(); }); } /** * 回滚数据库迁移 * * @return void */ public function down() { Schema::drop('flights'); } }
运行迁移
执行 Artisan 命令
migrate
来运行所有未完成的迁移:php artisan migrate
{注意} 如果你正在使用 Homestead 虚拟机,你应该在你的虚拟机里执行这个命令。
在生产环境强制执行迁移
一些迁移操作是具有破坏性的, 这意味着可能会导致数据丢失。 为了防止有人在生产环境中运行这些命令, 系统会在这些命令被运行之前与你进行确认。如果要强制忽略系统的提示运行命令, 则可以使用
--force
标记:php artisan migrate --force
回滚迁移
若要回滚最后一次迁移, 可以使用
rollback
命令。 此命令将回滚最后一次 “迁移” 的操作,其中可能包含多个迁移文件:php artisan migrate:rollback
你可以在
rollback
命令后面加上step
参数,来限制回滚迁移的个数。 例如,以下命令将回滚最近五次迁移:php artisan migrate:rollback --step=5
migrate:reset
php artisan migrate:reset
새 마이그레이션은database/migrations
디렉터리에 있습니다. 각 마이그레이션 파일 이름에는 Laravel이 마이그레이션 순서를 확인할 수 있도록 하는 타임스탬프가 포함되어 있습니다.--table
및--create
옵션을 사용하여 데이터 테이블 이름을 지정하거나 마이그레이션 시 새 데이터 테이블을 생성할지 여부를 지정할 수 있습니다. 실행. 마이그레이션 파일을 미리 생성할 때 지정된 데이터 테이블에 다음 옵션을 채워야 합니다. 🎜php artisan migrate:refresh // 刷新数据库结构并执行数据填充 php artisan migrate:refresh --seed
🎜 마이그레이션을 생성하기 위해 사용자 정의 출력 경로를 지정하려면make:migration<을 실행할 때 이를 추가할 수 있습니다. /code> 명령
--path
옵션에 지정된 경로는 애플리케이션의 기본 경로에 상대적이어야 합니다.
🎜🎜🎜마이그레이션 구조🎜🎜마이그레이션 클래스에는 일반적으로 2가지 메소드가 포함됩니다. < 코드> 위 및아래
.up
메서드는 새 데이터 테이블, 필드 또는 인덱스를 데이터베이스에 추가하는 데 사용되며down
메서드는up
의 반대 작업입니다. 메소드 및up
의 연산이 반대입니다. 🎜🎜이 두 가지 방법에서 Laravel의Schema
빌더는 테이블을 생성하고 수정하는 데 사용됩니다.Schema
생성기의 모든 기능을 이해하려면 사용 가능한 방법, 문서를 볼 수 있습니다. 예를 들어,flights
테이블을 생성하는 간단한 예: 🎜php artisan migrate:refresh --step=5
🎜🎜🎜 🎜마이그레이션 실행🎜🎜모든 미해결 마이그레이션을 실행하려면 Artisan 명령migration
을 실행하세요.🎜php artisan migrate:fresh php artisan migrate:fresh --seed
🎜{참고} Homestead 가상 머신을 사용하는 경우, 가상 머신 이 명령. 🎜
🎜프로덕션 환경에서 강제 마이그레이션
🎜일부 마이그레이션 작업은 파괴적이므로 데이터 손실이 발생할 수 있습니다. 프로덕션 환경에서 누군가가 이러한 명령을 실행하는 것을 방지하기 위해 시스템은 이러한 명령이 실행되기 전에 사용자에게 확인합니다. 시스템 프롬프트와 관계없이 명령을 강제로 실행하려면--force
태그를 사용할 수 있습니다: 🎜Schema::create('users', function (Blueprint $table) { $table->increments('id'); });
🎜🎜🎜롤백 마이그레이션
🎜마지막 마이그레이션을 롤백하려면rollback
명령을 사용할 수 있습니다. 이 명령은 여러 마이그레이션 파일이 포함될 수 있는 마지막 "마이그레이션" 작업을 롤백합니다. 🎜if (Schema::hasTable('users')) { // } if (Schema::hasColumn('users', 'email')) { // }
🎜rollback
명령 뒤에step
매개변수를 추가하여 개수를 제한할 수 있습니다. 롤백 마이그레이션. 예를 들어 다음 명령은 마지막 5개의 마이그레이션을 롤백합니다. 🎜Schema::connection('foo')->create('users', function (Blueprint $table) { $table->increments('id'); });
🎜migration:reset
이 명령은 애플리케이션의 모든 마이그레이션을 롤백할 수 있습니다. 🎜Schema::rename($from, $to);
🎜🎜단일 명령을 사용하여 롤백 또는 마이그레이션 수행
migration:refresh
명령은 데이터베이스의 모든 마이그레이션을 롤백할 뿐만 아니라 나중에migration
명령도 실행합니다. 이 명령은 전체 데이터베이스를 효율적으로 재구축할 수 있습니다.migrate:refresh
命令不仅会回滚数据库的所有迁移还会接着运行migrate
命令。 这个命令可以高效地重建整个数据库:Schema::drop('users');Schema::dropIfExists('users');
使用
refresh
命令并提供step
参数来回滚并再执行最后指定的迁移数。例如, 以下命令将回滚并重新执行最后五次迁移:Schema::table('users', function (Blueprint $table) { $table->string('email'); });
删除所有表 & 迁移
The
migrate:fresh
命令会从数据库中删除所有表,然后执行migrate
命令:Schema::table('users', function (Blueprint $table) { $table->string('email')->nullable(); });
数据表
创建数据表
可以使用
Schema
facade 的create
方法来创建新的数据库表。create
方法接受两个参数:第一个参数为数据表的名称,第二个参数是Closure
,此闭包会接收一个用于定义新数据表的Blueprint
对象:composer require doctrine/dbal
当然,在创建数据表的时候,可以使用任何数据库结构生成器的 字段方法 来定义数据表的字段。
检查数据表 / 字段是否存在
可以使用
hasTable
和hasColumn
Schema::table('users', function (Blueprint $table) { $table->string('name', 50)->change(); });
refresh
명령을 사용하고step
매개변수를 제공하여 마지막으로 지정된 마이그레이션 수를 롤백하고 다시 실행하세요. 예를 들어 다음 명령은 마지막 5개의 마이그레이션을 롤백하고 다시 실행합니다.Schema::table('users', function (Blueprint $table) { $table->string('name', 50)->nullable()->change(); });
🎜Delete all tables & migration 🎜🎜Themigration:fresh code> 명령은 데이터베이스에서 모든 테이블을 삭제한 다음
migration
명령을 실행합니다: 🎜Schema::table('users', function (Blueprint $table) { $table->renameColumn('from', 'to'); });
🎜🎜🎜데이터 테이블
🎜🎜🎜데이터 테이블 생성
🎜스키마
파사드의create
메소드를 사용하여 새 데이터베이스 테이블을 생성할 수 있습니다.create
메소드는 두 개의 매개변수를 받습니다. 첫 번째 매개변수는 데이터 테이블의 이름이고 두 번째 매개변수는Closure
입니다. 이 클로저는 새 데이터를 정의하는 매개변수를 받습니다.Blueprint
객체: 🎜Schema::table('users', function (Blueprint $table) { $table->dropColumn('votes'); });
🎜물론, 데이터 테이블을 생성할 때 모든 데이터베이스 구조의 필드 메소드를 사용할 수 있습니다. 이를 정의하기 위한 생성기 데이터 테이블의 필드입니다. 🎜🎜🎜데이터 테이블/필드가 존재하는지 확인하세요🎜🎜hasTable
및hasColumn
메소드를 사용할 수 있습니다 데이터를 확인하려면 테이블이나 필드가 존재합니까? 🎜Schema::table('users', function (Blueprint $table) { $table->dropColumn(['votes', 'avatar', 'location']); });
🎜🎜데이터베이스 연결 및 테이블 옵션
기본 연결이 아닌 데이터베이스 연결에서 구조 작업을 수행하려는 경우
connection
메서드를 사용할 수 있습니다.$table->string('email')->unique();
connection
方法:$table->unique('email');
你可以在数据库结构生成器上使用以下命令来定义表的选项: