在一般的程式碼版本可以用git來版本控制,而在資料庫呢?
Laravel提供 migrations(遷移),可提供建立資料表與設定欄位屬性之外,更可作為資料庫的版本控制工具。據說 migrations源自 Ruby on Rails,讓每次資料庫變更後紀錄保留一筆migration。
laravel官方文件寫可支援以下四種資料庫
預設是哪個?可從env檔、config/database.php 中確認預設資料庫為 MySQL。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
基本上只要設定env檔,下migrate相關指令後就可直接連結上MySQL。
生成遷移的基本指令
php artisan make:migration create_users_table
指定資料表的做法
php artisan make:migration create_users_table --create=users
php artisan make:migration create_users_table --table=users
指令結束後,會在專案中 database/migrations 路徑底下發現新增的檔案
migration一個基本上會分為兩個區塊
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tableName', function (Blueprint $table) {
$table->string('email')->index();
$table->string('token');
$table->timestamp('created_at')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('tableName');
}
php artisan migrate
會跑 up()裡頭的內容,就可以建立/修改資料表內容有問題就會爆紅字
php artisan migrate:rollback
會跑down() 裡頭的內容回到上一動。以下是個人常用的
$table->increments('id'); //遞增id 效果等同 UNSIGNED INTEGER
$table->string('email')->unique(); //信箱設定為唯一值
$table->timestamp('token_expire_time',0)->nullable(); //nullable允許空值
$table->float('fruits', 5, 1) ->nullable(); //float最多5位數,小數點後1位
$table->softDeletes(); //軟刪除
先建立欄位,再設定foreignkey條件
$table->unsignedInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
前面舊名稱、後面新名稱
$table->renameColumn('plaftfom', 'plaftform');
$table->string('image_path')->nullable()->change(); //最後要加個change
通常在更新、修改欄位時,系統會報錯:
Class 'Doctrine\DBAL\Driver\PDOMySql\Driver' not found
google大神提供了解答:composer require doctrine/dbal
安裝後重新migrate一次就行囉!
讀寫分離資料庫連結方式、SQLite連結方式設定、監聽查詢事件等,可參考官方文件
https://laravel.com/docs/7.x/database
參考資料
https://laravel.tw/docs/5.2/migrations
https://medium.com/@weilihmen/ruby-on-rails-%E8%AB%87migration%E6%A6%82%E5%BF%B5%E8%88%87%E7%94%A8%E6%B3%95-22a52714f51f
https://robertlan.com/programming/php/laravel-%E6%95%99%E5%AD%B8chapter2-%E8%B3%87%E6%96%99%E5%BA%AB%E9%81%B7%E7%A7%BBmigration/
https://stackoverflow.com/questions/33817983/artisan-migration-error-class-doctrine-dbal-driver-pdomysql-driver-not-fo