iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 1
0
Modern Web

Laravel 8: For Beginners系列 第 6

Base Feature (Part 3)

  • 分享至 

  • xImage
  •  

綱要

  • 資料庫遷移(Migrations)
  • 資料庫存取
    • Query Builder
    • Eloquent ORM

注意事項

資料庫遷移(Migrations)

Laravel 提供了資料庫遷移解決方案,它可以快速地建立 Database Schema。

$ php artisan make:migration [migration-file-name]

建立後的 migrations 會位於 database/migrations 中,會有一個時間序列後接上指定的 Migration File Name。

遷移檔說明

以預設的 create_users_table.php 為例,其目的為建立用戶表。

<?php

// database/migrations/2014_10_12_000000_create_users_table.php

// ...

class CreateUsersTable extends Migration
{
	public function up()
	{
		Schema::create('uesrs', function (Blueprint $table) {
			// ...
		});
	}

	public function down()
	{
		Schema::dropIfExists('users');
	}
}

其中,一個正常的 Migration File 應該存在 up()down() 兩個函式。

遷移時執行 up() 撤回時執行 down(),如此一來便可以控制遷移與回滾(rollback)的資料庫狀態。

遷移指令

利用以下指令可以進行遷移

$ php artisan migrate

若是對遷移後的結果不滿意,可以撤回

$ php artisan migrate:rollback

如果要重置所有的遷移指令,可利用

$ php artisan migrate:reset

一些重點提示

  • 已經上線的遷移檔不可以任意移除
    • 可以用新的遷移檔去移除其變動的欄位
  • 建立遷移指令後,用 php artisan migrate:refresh 去測試一次
    • 避免新增的 Table 不止一個,造成僅新增了一個 Table 而另一個失敗的情況而無法 rollback
  • 建議每一個 Migration File 僅變動一個 Table
    • 但是過多的 Migration File 會造成在遷移時耗時過久,尤其是做整合測試的時候
    • 如果 Migration File 過多,可以考慮使用 Null Migration 的方式解決

資料庫存取

Laravel 提供了兩種存取資料庫的方式:比較底層的 Query Builder 及比較易於使用的 Eloquent ORM

Query Builder

Query Builder 以 Illuminate\Support\Facades\DB 為起始,可以優雅地寫出 SQL

<?php

use Illuminate\Support\Facades\DB;

DB::table('users')->get(); // 取得所有 users 的資料
DB::table('users')->where('age', '>', 18)->get(); // 取得所有大於 18 歲的 users

// 新增一個 User
DB::table('users')->insert([
	'id' => 1,
	'name' => 'Jack',
	'email' => 'jack@example.test',
	'password' => Hash::make('password'),
]);

// 修改一個 User
DB::table('users')->where('id', 1)
	->update([
		'password' => Hash::make('new_password'),
	]);

// 刪除一個 User
DB::table('users')->where('id', 1)->delete();

Eloquent ORM

Eloquent ORM 是一個由 Laravel 官方開發的 ORM,其用意是為了簡化資料庫存取的複雜度。

建立 Eloquent ORM

$ php artisan make:model [model-name]
  • 注意:Model Name 通常為單數形,其複數形為 Table Name。舉例來說,Model Name 為 User ,它會自動去存取 users 這個 Table。

使用 Eloquent ORM

在應用程式中,我們可以很輕鬆地用 Eloquent ORM 去增刪改查某些資料。

<?php

use App\User;

User::all(); // 取得所有 users 的資料
User::where('age', '>', 18); // 取得所有大於 18 歲的 users

// 建立一個 User
$user = User::create([
	'name' => 'Jack',
	'email' => 'jack@example.test',
	'password' => Hash::make('password'),
]);

// 更新一個 User
$user->update([
	'password' => Hash::make('new_password'),
]);

// 刪除一個 User
$user->delete();

上一篇
Base Features (Part 2)
下一篇
一週回顧
系列文
Laravel 8: For Beginners14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言