引言
前兩期為了說明laravel框架提供的資料庫操作能力,直接使用DB門面操作, 而沒有引入更為強大的eloquent orm功能。從本期開始,我們就分次把 eloquent的一些簡要知識點,為大家提煉演示一下。主要以程式碼為主,配以簡要說明。
學習時間
Eloquent其實是一個 ActiveRecord 型別的 ORM。這是一個位於資料庫操作之上的一箇中間層, 不僅僅是對於整張表的操作,更能細化到每行記錄的增刪改查。
建立一個模型類非常簡單,只用繼承系統的模型就可以了:
use Illuminate\Database\Eloquent\Model; class Contact extends Model {}
因為遵循的是約定大於配置的慣例,所以上述模型如不指定表名,預設就是預設資料庫的contacts表了。
對於資料庫插入新條目,則可以便捷地使用模型的方法執行,比如下面這樣:
public function save(Request $request) {
$contact = new Contact();
$contact->first_name = $request->input("first_name");
$contact->last_name = $request->input("last_name");
$conatct->email = $request->input("email");
$contact->save();
return redirect("contacts");
}
建立一個合約,並使用傳入的表單資料填充。接著是使用模型對資料的查詢:
public function show($contactId) { return Contact::findOrFail($contactId); }
這裡有一個語法糖,就是 findOrFail,如果找到就返回一個模型,找不到就返回預設錯誤頁面。 上述方法會對Contact模型呼叫toArray方法進行格式化,然後返回一個 JsonResponse 物件的響應體。
如果返回的模型想要手動定製一下,那麼在查詢結果集中,使用Collection提供的格式化功能就好了。
public function vips() { return Contact::where("vip", true)->get()->map(function ($contact) { $contact->formalName = "The exalted {$contact->first_name} of the {$contact->last_name}s"; return $contact; }); }
大家注意,get方法返回的是一個 Eloquent Collection,包含了Model模型的集合。所以使用map遍歷集合元素時, 每個元素其實都是一個獨立的Contact物件,直接給物件追加屬性就可以增加欄位了。
建立模型
除了上面我們使用手動建立模型檔案之外,laravel還為我們提供了命令列方式快捷建立。 使用下面的指令:
php artisan make:model Contact
這樣會在 App 名稱空間下生成一個標準的模型檔案 Contact.php,內容如下:
namespace App; use Illuminate\Database\Eloquent\Model; class Contact extends Model { // }
如果資料庫表還沒有建立,你想要把遷移檔案的骨架程式碼也生成出來,只需在生成指令上追加引數如下:
php artisan make:model Contact --migration
有些時候,我們維護一些資料庫和表,想要動態切換某個模型所對應的資料庫表, 那麼只需在模型檔案內手動指定表名即可:
protected $table = "contacts_secondary";
如果你使用的主鍵不是id,是自定義的欄位名,那也可以手動指定:
protected $primaryKey = "contact_id";
這個contact_id是系統維護,而非自增的,你需要顯式宣告不要自增這個欄位:
public $incrementing = false;
如果建立的表內有created_at, updated_at等等標準欄位,而在資料庫表的欄位預設值內允許為NULL,或者預設為NULL。 你想要他們自動更新為當前系統時間,只需要新增這個配置項:
public $timestamps = false;
儲存的日期時間格式,也可以自定義:
protected $dateFormat = "Ymd His";
好了,關於模型的基本屬性和常用方法,也就這些了。
寫在最後
本文透過演示laravel框架模型建立,以及透過演示預設配置項到自定義配置內容, 為大家展示了Model所具備的一些很讚的特性。
Happy coding :-)
引言
前兩期為了說明laravel框架提供的資料庫操作能力,直接使用DB門面操作, 而沒有引入更為強大的eloquent orm功能。從本期開始,我們就分次把 eloquent的一些簡要知識點,為大家提煉演示一下。主要以程式碼為主,配以簡要說明。
學習時間
Eloquent其實是一個 ActiveRecord 型別的 ORM。這是一個位於資料庫操作之上的一箇中間層, 不僅僅是對於整張表的操作,更能細化到每行記錄的增刪改查。
建立一個模型類非常簡單,只用繼承系統的模型就可以了:
use Illuminate\Database\Eloquent\Model; class Contact extends Model {}
因為遵循的是約定大於配置的慣例,所以上述模型如不指定表名,預設就是預設資料庫的contacts表了。
對於資料庫插入新條目,則可以便捷地使用模型的方法執行,比如下面這樣:
public function save(Request $request) {
$contact = new Contact();
$contact->first_name = $request->input("first_name");
$contact->last_name = $request->input("last_name");
$conatct->email = $request->input("email");
$contact->save();
return redirect("contacts");
}
建立一個合約,並使用傳入的表單資料填充。接著是使用模型對資料的查詢:
public function show($contactId) { return Contact::findOrFail($contactId); }
這裡有一個語法糖,就是 findOrFail,如果找到就返回一個模型,找不到就返回預設錯誤頁面。 上述方法會對Contact模型呼叫toArray方法進行格式化,然後返回一個 JsonResponse 物件的響應體。
如果返回的模型想要手動定製一下,那麼在查詢結果集中,使用Collection提供的格式化功能就好了。
public function vips() { return Contact::where("vip", true)->get()->map(function ($contact) { $contact->formalName = "The exalted {$contact->first_name} of the {$contact->last_name}s"; return $contact; }); }
大家注意,get方法返回的是一個 Eloquent Collection,包含了Model模型的集合。所以使用map遍歷集合元素時, 每個元素其實都是一個獨立的Contact物件,直接給物件追加屬性就可以增加欄位了。
建立模型
除了上面我們使用手動建立模型檔案之外,laravel還為我們提供了命令列方式快捷建立。 使用下面的指令:
php artisan make:model Contact
這樣會在 App 名稱空間下生成一個標準的模型檔案 Contact.php,內容如下:
namespace App; use Illuminate\Database\Eloquent\Model; class Contact extends Model { // }
如果資料庫表還沒有建立,你想要把遷移檔案的骨架程式碼也生成出來,只需在生成指令上追加引數如下:
php artisan make:model Contact --migration
有些時候,我們維護一些資料庫和表,想要動態切換某個模型所對應的資料庫表, 那麼只需在模型檔案內手動指定表名即可:
protected $table = "contacts_secondary";
如果你使用的主鍵不是id,是自定義的欄位名,那也可以手動指定:
protected $primaryKey = "contact_id";
這個contact_id是系統維護,而非自增的,你需要顯式宣告不要自增這個欄位:
public $incrementing = false;
如果建立的表內有created_at, updated_at等等標準欄位,而在資料庫表的欄位預設值內允許為NULL,或者預設為NULL。 你想要他們自動更新為當前系統時間,只需要新增這個配置項:
public $timestamps = false;
儲存的日期時間格式,也可以自定義:
protected $dateFormat = "Ymd His";
好了,關於模型的基本屬性和常用方法,也就這些了。
寫在最後
本文透過演示laravel框架模型建立,以及透過演示預設配置項到自定義配置內容, 為大家展示了Model所具備的一些很讚的特性。
Happy coding :-)