Laravel middleware: Tambahkan migrasi pangkalan data dan pengurusan versi pada aplikasi
Apabila membangun dan menyelenggara aplikasi web, migrasi pangkalan data dan pengurusan versi adalah tugas yang sangat penting. Ia membolehkan kami mengurus struktur dan data pangkalan data dengan mudah tanpa perlu mengemas kini atau membina semula pangkalan data secara manual. Rangka kerja Laravel menyediakan pemindahan pangkalan data dan fungsi pengurusan versi yang berkuasa dan mudah Dengan menggunakan perisian tengah, kami boleh menyepadukan fungsi ini dengan lebih mudah ke dalam aplikasi kami.
Pertama, kami perlu memastikan projek Laravel kami dipasang dan berjalan dengan betul. Dalam artikel ini, kami akan menumpukan pada cara menggunakan perisian tengah Laravel untuk menambah pemindahan pangkalan data dan keupayaan pengurusan versi pada aplikasi kami.
Pertama, kami perlu memperkenalkan pakej illuminate/database
ke dalam projek kami. Buka fail composer.json
projek dan tambah kod berikut: illuminate/database
包。打开项目的composer.json
文件并添加以下代码:
"require": { "illuminate/database": "^8.0" }
保存文件后,在命令行中运行composer update
命令以安装该包。
接下来,我们需要在Laravel项目的config/app.php
文件中配置我们的数据库连接。在databases
数组中添加以下代码:
'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ],
确保你已经设置了正确的数据库连接参数,并保存文件。
现在,我们将创建一个中间件来处理数据库迁移和版本管理。在命令行中,输入以下命令创建一个名为DatabaseMiddleware
的中间件类:
php artisan make:middleware DatabaseMiddleware
此命令将在app/Http/Middleware
目录下创建一个名为DatabaseMiddleware.php
的文件。打开该文件,并使用以下代码替换其中的内容:
<?php namespace AppHttpMiddleware; use Closure; use IlluminateDatabaseMigrationsMigrator; class DatabaseMiddleware { /** * Handle an incoming request. * * @param IlluminateHttpRequest $request * @param Closure $next * @return mixed */ public function handle($request, Closure $next) { $migrator = new Migrator(app('db'), app('migration.repository')); if ($this->needsMigration($migrator)) { $migrator->run(database_path('migrations')); } if ($this->needsSeeding($migrator)) { $migrator->run(database_path('seeds')); } return $next($request); } /** * Determine if the database needs to be migrated. * * @param IlluminateDatabaseMigrationsMigrator $migrator * @return bool */ protected function needsMigration($migrator) { return count($migrator->pendingMigrations()) > 0; } /** * Determine if the database needs to be seeded. * * @param IlluminateDatabaseMigrationsMigrator $migrator * @return bool */ protected function needsSeeding($migrator) { return $migrator->repositoryExists() && !$migrator->repositoryHasSeeded(); } }
上述代码中,我们创建了一个名为DatabaseMiddleware
的中间件类。在handle
方法中,我们使用Migrator
类来执行数据库迁移和版本管理操作。如果有未执行的迁移,我们将运行run
方法来执行这些迁移。类似地,如果尚未进行过数据填充,我们将运行run
方法来进行数据填充。
接下来,我们需要在应用程序的中间件配置文件中注册我们的中间件。打开app/Http/Kernel.php
文件,在$routeMiddleware
数组中添加以下代码:
'database' => AppHttpMiddlewareDatabaseMiddleware::class,
保存文件后,我们的中间件已经注册到应用程序中了。
最后,我们需要在我们的路由或控制器中使用我们的中间件。假设我们要将数据库迁移和版本管理应用于所有路由,我们可以在web
中间件组中使用database
中间件。打开app/Providers/RouteServiceProvider.php
文件,将以下代码添加到mapWebRoutes
protected function mapWebRoutes() { Route::middleware('web', 'database') // 添加 'database' 中间件 ->namespace($this->namespace) ->group(base_path('routes/web.php')); }
composer update
pada baris arahan untuk memasang pakej. Seterusnya, kami perlu mengkonfigurasi sambungan pangkalan data kami dalam fail config/app.php
projek Laravel. Tambahkan kod berikut dalam tatasusunan pangkalan data
: rrreee
Pastikan anda telah menetapkan parameter sambungan pangkalan data yang betul dan simpan fail. Kini, kami akan mencipta perisian tengah untuk mengendalikan pemindahan pangkalan data dan pengurusan versi. Dalam baris arahan, masukkan arahan berikut untuk mencipta kelas middleware bernamaDatabaseMiddleware
: 🎜rrreee🎜Arahan ini akan mencipta kelas bernama Fail DatabaseMiddleware.php
. Buka fail dan gantikan kandungannya dengan kod berikut: 🎜rrreee🎜Dalam kod di atas, kami mencipta kelas middleware bernama DatabaseMiddleware
. Dalam kaedah handle
, kami menggunakan kelas Migrator
untuk melaksanakan penghijrahan pangkalan data dan operasi pengurusan versi. Jika terdapat migrasi yang tidak dilaksanakan, kami akan menjalankan kaedah run
untuk melaksanakan migrasi ini. Begitu juga, jika pengisian data masih belum dilakukan, kami akan menjalankan kaedah run
untuk melakukan pengisian data. 🎜🎜Seterusnya, kami perlu mendaftarkan middleware kami dalam fail konfigurasi middleware aplikasi. Buka fail app/Http/Kernel.php
dan tambah kod berikut dalam tatasusunan $routeMiddleware
: 🎜rrreee🎜Selepas menyimpan fail, middleware kami telah didaftarkan ke permohonan . 🎜🎜Akhir sekali, kami perlu menggunakan perisian tengah kami dalam laluan atau pengawal kami. Katakan kita ingin menggunakan migrasi pangkalan data dan versi pada semua laluan, kita boleh menggunakan perisian tengah pangkalan data
dalam kumpulan perisian tengah web
. Buka fail app/Providers/RouteServiceProvider.php
dan tambahkan kod berikut pada kaedah mapWebRoutes
: 🎜rrreee🎜Selepas menyimpan fail, kami telah berjaya menyepadukan migrasi pangkalan data dan versi perisian pengurusan ke dalam aplikasi kami. 🎜🎜Dengan langkah di atas, kami berjaya menggunakan perisian tengah Laravel untuk pemindahan pangkalan data dan pengurusan versi. Setiap kali kami mengakses aplikasi kami, middleware menyemak sama ada pangkalan data perlu dipindahkan atau versi dan melaksanakan operasi ini seperti yang diperlukan. 🎜🎜Semoga artikel ini dapat membantu anda dalam menggunakan Laravel untuk pemindahan pangkalan data dan pengurusan versi. Middleware menyediakan cara yang mudah untuk menyepadukan fungsi ini ke dalam aplikasi kami, menjadikan kerja pembangunan dan penyelenggaraan kami lebih cekap dan mudah. 🎜Atas ialah kandungan terperinci Perisian tengah Laravel: Tambahkan pemindahan pangkalan data dan pengurusan versi pada aplikasi anda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!