Penghijrahan pangkalan data
- Rollback migrasi
- Jadual data
- Buat jadual data
- Buat medan
- Pengenalan Migrasi adalah seperti kawalan versi pangkalan data, membolehkan pasukan mengedit dan berkongsi struktur jadual pangkalan data aplikasi biasanya digunakan bersama dengan struktur pangkalan data Laravel membina struktur pangkalan data dengan mudah. Jika anda pernah terpaksa meminta rakan sekerja untuk menambah medan secara manual pada struktur pangkalan data, penghijrahan pangkalan data boleh menyelamatkan anda daripada perlu berbuat demikian.
- Fasad Laravel menyediakan sokongan yang sepadan untuk mencipta dan mengendalikan jadual data untuk semua sistem pangkalan data yang disokong oleh Laravel.
Jana migrasi
Gunakan perintah Artisan make:migration
untuk membuat migrasi. 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:resetPenghijrahan baharu terletak dalam direktori
--jadual
dan --create
boleh digunakan untuk menentukan nama jadual data, atau sama ada jadual data baharu akan dibuat apabila migrasi dibuat dilaksanakan. Pilihan ini perlu diisi dalam jadual data yang ditentukan semasa pra-menjana fail migrasi: 🎜php artisan migrate:refresh // 刷新数据库结构并执行数据填充 php artisan migrate:refresh --seed🎜 Jika anda ingin menentukan laluan output tersuai untuk menjana migrasi, anda boleh menambahkannya semasa menjalankan
make:migration< /code> arahan --path
pilihan, laluan yang diberikan mestilah relatif kepada laluan asas aplikasi.
🎜🎜🎜Struktur migrasi🎜🎜Kelas migrasi biasanya mengandungi 2 kaedah: atas dan down
. Kaedah up
digunakan untuk menambah jadual data, medan atau indeks baharu pada pangkalan data dan kaedah down
ialah operasi terbalik bagi up
kaedah, dan up
diterbalikkan. 🎜🎜Dalam dua kaedah ini, pembina Schema
Laravel digunakan untuk mencipta dan mengubah suai jadual.
Untuk memahami semua fungsi dalam penjana Skema
Kaedah yang tersedia, boleh melihat dokumentasinya. Contohnya, contoh mudah untuk membuat jadual penerbangan
: 🎜php artisan migrate:refresh --step=5
🎜🎜🎜 🎜Jalankan migrasi🎜🎜 Laksanakan perintah Artisan migrate
untuk menjalankan semua migrasi tertunggak:🎜php artisan migrate:fresh
php artisan migrate:fresh --seed
🎜{Nota} Jika anda menggunakan mesin maya Homestead, anda harus melaksanakannya dalam mesin maya arahan ini. 🎜
🎜Penghijrahan paksa dalam persekitaran pengeluaran
🎜Sesetengah operasi migrasi merosakkan, yang bermaksud ia boleh menyebabkan Data hilang. Untuk menghalang seseorang daripada menjalankan arahan ini dalam persekitaran pengeluaran, sistem akan mengesahkan dengan anda sebelum arahan ini dijalankan. Jika anda ingin memaksa arahan dijalankan tanpa mengira gesaan sistem, anda boleh menggunakan tag --force
: 🎜Schema::create('users', function (Blueprint $table)
{
$table->increments('id');
});
🎜🎜🎜Penghijrahan balik
🎜Untuk melancarkan semula migrasi terakhir, anda boleh menggunakan perintah rollback
. Perintah ini akan melancarkan operasi "penghijrahan" yang terakhir, yang mungkin mengandungi berbilang fail migrasi: 🎜if (Schema::hasTable('users')) {
//
}
if (Schema::hasColumn('users', 'email')) {
//
}
🎜Anda boleh menambah parameter step
selepas perintah rollback
untuk Hadkan nombor penghijrahan balik. Sebagai contoh, arahan berikut akan melancarkan lima migrasi terakhir: 🎜Schema::connection('foo')->create('users', function (Blueprint $table) {
$table->increments('id');
});
🎜migrate:reset
Perintah itu boleh melancarkan semula semua migrasi dalam aplikasi: 🎜Schema::rename($from, $to);
🎜🎜Gunakan satu arahan untuk melakukan pemulangan atau penghijrahan
Perintah migrate:refresh
bukan sahaja akan melancarkan semula semua migrasi pangkalan data tetapi juga akan menjalankan perintah migrate
selepas itu. Perintah ini boleh membina semula keseluruhan pangkalan data dengan cekap: 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();
});
Gunakan perintah refresh
dan berikan parameter step
untuk melancarkan semula dan melaksanakan semula bilangan migrasi terakhir yang ditentukan. Sebagai contoh, arahan berikut akan melancarkan semula dan melaksanakan semula lima migrasi terakhir: Schema::table('users', function (Blueprint $table) {
$table->string('name', 50)->nullable()->change();
});
🎜Padam semua jadual & pindahkan 🎜🎜migrate:fresh The code> arahan akan memadam semua jadual daripada pangkalan data dan kemudian melaksanakan perintah migrate
: 🎜Schema::table('users', function (Blueprint $table) {
$table->renameColumn('from', 'to');
});
🎜🎜🎜Jadual data
🎜🎜🎜 Mencipta jadual Data
🎜Anda boleh menggunakan kaedah buat
fasad Skema
untuk mencipta jadual pangkalan data baharu. Kaedah create
menerima dua parameter: parameter pertama ialah nama jadual data dan parameter kedua ialah Penutupan
ini akan menerima parameter untuk menentukan data baharu jadual. Objek Blueprint
: 🎜Schema::table('users', function (Blueprint $table) {
$table->dropColumn('votes');
});
🎜Sudah tentu, semasa membuat jadual data, anda boleh menggunakan kaedah medan bagi mana-mana struktur pangkalan data penjana untuk mentakrifkannya Medan jadual data. 🎜🎜🎜Semak sama ada jadual/medan data wujud🎜🎜Anda boleh menggunakan kaedah hasTable
dan hasColumn
untuk menyemak data Adakah jadual atau medan wujud: 🎜Schema::table('users', function (Blueprint $table) {
$table->dropColumn(['votes', 'avatar', 'location']);
});
🎜🎜Sambungan Pangkalan Data & Pilihan Jadual
Jika anda ingin melakukan operasi struktur pada sambungan pangkalan data yang bukan sambungan lalai, anda boleh menggunakan kaedah sambungan:
$table->string('email')->unique();
connection
方法:$table->unique('email');
你可以在数据库结构生成器上使用以下命令来定义表的选项: