Eloquent ORM是對象關(guān)系映射掐松,是用來與數(shù)據(jù)庫里面數(shù)據(jù)進(jìn)行交互的附帽。每一個數(shù)據(jù)庫里面的表,都有一個對應(yīng)的模型馆衔,我們可以利用模型定義一些屬于這個模型對象擁有的一些方法瘟判。那么屬于這個對象的都可以使用里面方法怨绣。那么,如何創(chuàng)建一個模型呢拷获?
創(chuàng)建模型實例的最簡單方法是使用make:model:
命令為:
php artisan make:model User
當(dāng)你生成一個模型時想要順便生成一個 數(shù)據(jù)庫遷移篮撑,可以使用--migration或-m選項:
php artisan make:model User --migration
php artisan make:model User -m
一般情況下,數(shù)據(jù)表明確地指定了其它名稱匆瓜,否則將使用類的「蛇形名稱」赢笨、復(fù)數(shù)形式名稱來作為數(shù)據(jù)表的名稱。也可以指定關(guān)聯(lián)的表名字驮吱, protected $table = 'users'茧妒,一旦模型關(guān)聯(lián)了數(shù)據(jù)表。就可以從數(shù)據(jù)庫中獲取數(shù)據(jù)左冬。
比如以下的一行代碼桐筏,
use App\User;
$users = User::orderBy('id', 'desc')->paginate(24);
默認(rèn)情況下 Eloquent 返回的都是一個Illuminate\Database\Eloquent\Collection對象的實例,包括通過get方法檢索或通過訪問關(guān)聯(lián)關(guān)系獲取到的結(jié)果拇砰。Eloquent 的集合對象繼承了 Laravel 的集合基類(https://d.laravel-china.org/docs/5.5/collections)梅忌,因此它自然也繼承了數(shù)十種能優(yōu)雅地處理 Eloquent 模型底層數(shù)組的方法。由于每個 Eloquent 模型都可以當(dāng)作一個查詢構(gòu)造器(Laravel 的數(shù)據(jù)庫查詢構(gòu)造器提供了一個方便毕匀、流暢的接口铸鹰,用來創(chuàng)建及運行數(shù)據(jù)庫查詢語句。它能用來執(zhí)行應(yīng)用程序中的大部分?jǐn)?shù)據(jù)庫操作皂岔,且能在所有被支持的數(shù)據(jù)庫系統(tǒng)中使用蹋笼。Laravel 的查詢構(gòu)造器使用 PDO 參數(shù)綁定,來保護(hù)你的應(yīng)用程序免受 SQL 注入的攻擊躁垛。在綁定傳入字符串前不需要清理它們剖毯。),所以你可以在查詢中增加規(guī)則教馆,然后使用get方法來獲取結(jié)果逊谋。
創(chuàng)建模型實例:
要在數(shù)據(jù)庫中創(chuàng)建一條新記錄,只需創(chuàng)建一個新模型實例土铺,并在模型上設(shè)置屬性和調(diào)用save方法即可:當(dāng)save方法被調(diào)用時胶滋,created_at以及updated_at時間戳將會被自動設(shè)置,因此我們不需要去手動設(shè)置它們悲敷。使用create方法通過一行代碼來保存一個新模型究恤。被插入數(shù)據(jù)庫的模型實例將會返回給你。不過后德,在這樣做之前部宿,你需要先在你的模型上定義一個fillable(白名單)或guarded(黑名單)屬性,因為所有的 Eloquent 模型都針對批量賦值(Mass-Assignment)做了保護(hù)。當(dāng)用戶通過 HTTP 請求傳入了非預(yù)期的參數(shù)理张,并借助這些參數(shù)更改了數(shù)據(jù)庫中你并不打算要更改的字段赫蛇,這時就會出現(xiàn)批量賦值(Mass-Assignment)漏洞。例如雾叭,惡意用戶可能會通過 HTTP 請求發(fā)送is_admin參數(shù)悟耘,然后對應(yīng)到你模型的create方法,此操作能讓該用戶把自己升級為一個管理者织狐。所以作煌,在開始之前,你應(yīng)該定義好哪些模型屬性是可以被批量賦值的赚瘦。你可以在模型上使用$fillable屬性來實現(xiàn)。當(dāng)用戶通過 HTTP 請求傳入了非預(yù)期的參數(shù)奏寨,并借助這些參數(shù)更改了數(shù)據(jù)庫中你并不打算要更改的字段起意,這時就會出現(xiàn)批量賦值(Mass-Assignment)漏洞。例如病瞳,惡意用戶可能會通過 HTTP 請求發(fā)送is_admin參數(shù)揽咕,然后對應(yīng)到你模型的create方法,此操作能讓該用戶把自己升級為一個管理者套菜。