遇見 Laravel 的午後(Part 6)
網站跟資料庫簽立契約的開始。很怕還沒締結契約好,他們就先分手了…,希望我是他們最好的媒人公。
進入主題前的小知識
Laravel 內建四種資料庫連線方式
- SQLite(sqlite)
- MySQL(mysql)
Laravel 連線預設
- PostgreSQL(pgsql)
- SQL Server(sqlsrv)
Laravel 透過資料庫存取方式
- Query Builder 查詢產生器
- Eloquent ORM 關聯式資料庫映射
資料填充的方式
- Seeder
- Factory
建立資料庫連線
在建立 Laravel 專案中,Laravel已經將資料庫連線方式已經寫好等我們了,只要我們自己設定一下就可以完成連線程序。大多使用 Laravel 的開發者,都是以MySQL做為搭配的資料庫,那Laravel 剛好就預設MySQL連線方式。
專案 > config > database.php(資料庫連線設定檔)
設定專案環境設定檔
本機與正式機器的時候,環境有所不同,有些資料庫會另外給一台主機,有些則是跟程式同一台主機,但都需修改以下資料。
※ Laravel 在執行啟動時,會一併將.env環境設定檔做載入。
- 主機名稱(host)
- 連接埠號(port)
- 資料庫名稱(database)
- 資料庫帳號(username)
- 資料庫密碼(password)
專案 > .env
1 | DB_CONNECTION=mysql #資料庫類型 |
測試資料庫是否有連線成功
讀取資料表做為測試,取得 member資料表 第一筆資料。
1 | Route::get('/', function () { |
執行結果 出現第一筆資料結果,代表資料庫連線成功
資料庫遷移(migration)
migration
是掌握資料庫結構的檔案,透過程式碼定義資料庫欄位、型態,就很像是我們一般在匯出資料庫的時候所看到的原始碼一樣。在專案程式要共同撰寫的時候,透過Git一起開發,大家都會拿到一樣的 migration
描述檔,
建立資料庫遷移(migration)
- 資料表使用英文複數(s、es)
- 資料表用字母小寫,單字間用蛇底式命名(Snake Case)
使用 artisan 指令建立migration
。
1 | $ php artisan make:migration create_members_table |
:::info
建立migration和model兩個步驟同時新增,可以直接在後面加上-m (代表新增 migration)
※ 命名規則:單字字首大寫,不加上複數。
結果:
model名稱 -> Member.php,
migration名稱 -> 2020_05_22_105756_create_members_table.php
1 | $ php artisan make:model Member -m |
:::
執行以上指令檔案建立在 專案 > database > migrations
, 打開 2020_05_22_105756_create_members_table.php
。
※ 檔名的組成:<建立日期時間> _ create_ <資料表名稱>_table,
每個建立好的 migration
會有兩個 function 分別是 up 和 down。
程式碼如下
1 |
|
終端機輸入以下指令:
1 | $ php artisan migrate |
會執行 public function up()
方法來新增資料表。
1 | $ php artisan migrate:rollback |
會執行 public function down()
方法來刪除資料表。
有關資料表的操作可詳見 結構生成器 (Schema)
資料表欄位設計
Laravel migrat常用型態介紹
詳細型態轉換,參考官方文件資料庫遷移
數值
欄位設定 | 對應資料庫屬性 | 備註 |
---|---|---|
$table->increments(‘id’); | int | AUTO_INCREMENT |
$table->integer(‘votes’); | int | |
$table->double(‘column’, 15, 8); | double | |
$table->float(‘amount’); | float | |
$table->boolean(‘confirmed’); | boolean | |
$table->decimal(‘amount’, 5, 2); | decimal |
時間
欄位設定 | 對應資料庫屬性 | 備註 |
---|---|---|
$table->date(‘created_at’); | date | |
$table->dateTime(‘created_at’); | dateTime | |
$table->time(‘sunrise’); | time | |
$table->timestamp(‘added_on’); | timestamp | |
$table->timestamps(); | timestamps | 加入 created_at 和 updated_at 。 |
字串
欄位設定 | 對應資料庫屬性 | 備註 |
---|---|---|
$table->char(‘name’, 4); | char | |
$table->string(‘email’); | varchar | |
$table->string(‘name’, 100); | varchar | |
$table->text(‘description’); | text | |
$table->enum(‘choices’, array(‘foo’, ‘bar’)); | enum | |
$table->json(‘options’); | JSON |
預設
通用
語法 | 預設內容 | 備註 |
---|---|---|
->nullable() | NULL | |
->default($value) | $value | 宣告欄位的預設值 |
->unique() | 唯一值 | |
$table->unique([‘m_account’],’member_account_uk’); | 唯一值 | 與前一個方法相同 |
->primary() | 主鍵值 | |
$table->primary([‘id’],’member_pk’); | 主鍵值 | 與前一個方法相同 |
->index() | 索引 | |
$table->index([‘m_email’],’m_email_index’); | 索引 | 與前一個方法相同 |
數值
語法 | 預設內容 | 備註 |
---|---|---|
->unsigned() | 0(含)以上 | 設定整數是無分正負 |
->default($value) | $value | 宣告欄位的預設值 |
日期
語法 | 預設內容 | 備註 |
---|---|---|
-> default(DB::raw(‘CURRENT_TIMESTAMP’)) | 現在時間 | 取得目前的系統日期或時間 |
將所需要欄位轉化為Laravel 寫法
我們要設計一個屬於會員的資料
英文名稱 | 中文名稱 | 資料庫型態 | 鍵值 |
---|---|---|---|
id | 編號 | int | Primary Key |
m_account | 會員帳號 | varchar(50) | |
m_password | 會員密碼 | varchar(32) | |
m_name | 會員姓名 | varchar(50) | |
m_id | 會員編號 | varchar(50) | |
m_email | 會員信箱 | varchar(50) | |
m_phone | 會員電話 | varchar(50) | |
m_login_time | 會員登入時間 | datetime | |
create_at | 建立時間 | datetime | |
update_at | 更新時間 | datetime |
※ Primary key (主鍵) 設定資料表格不可重覆、空白或為Null的主鍵值
※ Foreign key (外來鍵) 設定該欄位值的存在必須關連並參照指定資料表格的欄位值
※ Index (索引鍵) 資料索引,可加快搜尋速度
※ Unique (不重複鍵、唯一值) 設定一個或多個欄位組合,資料內容需唯一不可重覆
專案 > database > migrations > 2020_05_22_105756_create_members_table.php
。
1 |
|
簡單介紹建立及更新時間的欄位語法,在Laravel中,其實內建好create_at
及updated_at
這兩個欄位,他也相較於$table->timestamp('create_at')
及 $table->timestamp('updated_at')
的寫法。
1 | // 建立時間、更新時間 |
使用 artisan 指令執行 migration
的檔案,建立資料表。
1 | $ php artisan migrate |
執行上面指令,資料庫增加以下資料表。 migrations
資料表主要是紀錄執行migrate
動作的資料表。
使用 artisan 指令執行恢復上一次異動的 migration
檔案。
1 | $ php artisan migrate:rollback |
使用 artisan 指令執行移除migration
檔案。
1 | $ php artisan migrate:reset |
使用 artisan 指令執行重新建立 migration
的檔案,重新建立資料表
1 | $ php artisan migrate:refresh |
使用 artisan 指令執行刪掉所有資料庫的資料表(含migrations),並再執行一次migrate
1 | $ php artisan migrate:fresh |
結論
離在做CRUD的路愈來愈近了,希望可以愈來愈上手,這章在建立資料表的時候,其實沒有那麼順利,要認識很多語法及設定,或許有段時間沒接觸框架這東西吧,在學的時候很怕寫出來的文章會誤人子弟,雖然已經誤人子弟了,哈哈,但總而言之,至少是前進一大步了。
標籤: w3HexSchool
PHP
Laravel
原文作者: Sian
原文鏈接: https://dew31794.github.io/2020/05/24/遇見 Laravel 的午後(Part 6)/
版權聲明: 轉載請註明出處(必須保留作者署名及鏈接)