前言
Laravel 為我們預設建立的模型檔案放置在 app 資料夾下,為了更好理解 MVC 模式的開發流程,統一使用 app/Models 資料夾來放置所有的模型檔案。現在讓我們先來建立一個 app/Models 資料夾,並將 預設為我們生成了使用者模型檔案User.php
檔案放置到其中。
建立模型
$ php artisan make:model Models/up
如果需要在建立模型的同時順便建立資料庫遷移,則可以在後面使用 –migration 或 -m 選項
Eloquent 表命名約定
模型預設情況下會使用類的「下劃線命名法」與「複數形式名稱」來作為資料表的名稱生成規則。如:
- Article 資料模型類對應 articles 表;
- User 資料模型類對應 users 表;
- BlogPost 資料模型類對應 blog_posts 表;
User.php
預設模型檔案
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
*指明要進行資料庫互動的資料庫表名稱
*
* @var string
*/
protected $table = 'users';
/**
* 防止批量賦值安全漏洞的欄位白名單
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* 當使用 $user->toArray() 或 $user->toJson() 時隱藏這些欄位
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* 指定模型屬性的資料型別
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
}
引用
Notifiable
訊息通知相關功能引用Authenticatable
授權相關功能引用
屬性
table
指明要進行資料庫互動的資料庫表名稱,讓我們很方便的與資料庫進行互動fillable
在過濾使用者提交的欄位,只有包含在該屬性中的欄位才能夠被正常更新hidden
對使用者密碼或其它敏感資訊在使用者例項通過陣列或 JSON 顯示時進行隱藏casts
指定欄位的型別
Tinker
程式設計環境
演示 - 建立使用者物件
在瞭解 Eloquent 模型的基本原理之後,接下來讓我們嘗試使用 Eloquent 模型來建立一個使用者物件,並將該使用者物件儲存到資料庫。雖然我們現在還沒有使用者登錄檔單,但是通過 Laravel 提供的 Tinker 環境可以讓我們完成對使用者物件建立。Tinker 是一個 REPL (read-eval-print-loop),REPL 指的是一個簡單的、可互動式的程式設計環境,通過執行使用者輸入的命令,並將執行結果直接列印到命令列介面上來完成整個操作。REPL 對於學習一門新的程式語言具有很大的幫助,因為它能立刻對初學者做出的動作進行響應。接下來我們將使用 Tinker 來操作使用者物件。
首先讓我們使用此命令進入 Tinker 環境:
$ php artisan tinker
通過下面命令我們可以很輕鬆的建立一個使用者物件:
>>> App\Models\User::create(['name'=> 'xie', 'email'=>'1194832688@qq.com','password'=>bcrypt('password')])
注意:這裡我們又多了一種命令列提示符 - >>> , 代表著 artisan tinker 命令列環境。
查詢
使用 use 來引用 App\Models\User
Eloquent 模型類
方便不用寫那麼長了,就像下面的方式
>> use App\Models\User
查詢一個 id 為 1 的使用者,使用以下方法:
>>> User::find(1)
當你傳給 find 方法的 id 不存在時,Tinker 將會返回 null:
>>> User::find(5)
如果你想在查詢使用者不存在時觸發報錯的話,可使用 findOrFail:
>>> User::findOrFail(5)
如果要查詢使用者表中的首個使用者,可以使用 first 方法:
>>> User::first()
我們還可以用 all 方法取出所有的使用者資料:
>>> User::all()
更新
在使用者建立成功之後,我們還可以對使用者資訊進行更新。有兩種方式可以完成使用者的更新操作:
- 第一種是通過給使用者物件屬性進行賦值,賦值成功後再呼叫 save 方法進行儲存更新;
- 第二種則是直接呼叫 update 方法進行更新;
一般較為常用的是第二種更新方式。
首先,讓我們將使用者物件從資料庫中取出,並賦值給 user 變數。
>>> $user = User::first()
save 方法更新
使用者名稱進行更新,將其名字更改為 josh
>>> $user->name = 'josh'
讓我們來呼叫 save 方法對使用者資訊進行儲存
>>> $user->save()
update 方法更新
下面讓我們再來使用 update 方法將使用者名稱更改回 xie:
>>> $user = user::first()
>>> $user->update(['name'=>'xie'])
至此模型大概就這樣玩啦
tinker 程式設計環境總結
- 一開始我以為使用模型與資料庫互動是必須要引用上面那些,但是我刪除這些引用,一樣可以操作
- 一開始我以為只能使用這個
user
模型進行操作,不會這麼傻吧,然後就認識到錯誤1.你新加的模型要有上面的
屬性
,不然會報錯,這個錯誤是注入錯誤,fillable
新增白名單
2.新增資料的時候它會自動新增二個欄位updated_at 與 created_at
本作品採用《CC 協議》,轉載必須註明作者和本文連結