Laravel?Eloquent的九個(gè)實(shí)用特性詳解
正文
對(duì)于使用 Laravel 的開(kāi)發(fā)者來(lái)說(shuō),可能都會(huì)驚嘆于 Eloquent Model 的強(qiáng)大,但是在強(qiáng)大的表面之下,其實(shí)還是有很多鮮為人知的特性的,本文即來(lái)分享十個(gè) Laravel Eloquent 的強(qiáng)大特性。
1.更強(qiáng)大的 find() 方法
很多開(kāi)發(fā)者在使用 find()
方法的時(shí)候,通常就只是在這里傳入一個(gè) ID 的參數(shù),其實(shí)我們也是可以傳入第二個(gè)參數(shù)的:在 find()
方法中指定需要查找的字段
$user = App\User::find(1, ['name', 'age']); $user = App\User::findOrFail(1, ['name', 'age']); // 這里面的 name 和 age 字段就是制定只查找這兩個(gè)字段
2.克隆 Model
直接使用 replicate()
方法即可,這樣我們就很容易地創(chuàng)建一個(gè) Model 的副本:
$user = App\User::find(1); $newUser = $user->replicate(); $newUser->save(); // 這樣,$newUser 和 $user 的基本數(shù)據(jù)就是一樣的
3.檢查 Model 是否相同
使用 is()
方法檢查兩個(gè) Model 的 ID 是否一致,是否在同一個(gè)表中:
$user = App\User::find(1); $sameUser = App\User::find(1); $diffUser = App\User::find(2); $user->is($sameUser); // true $user->is($diffUser); // false
4.在關(guān)聯(lián)模型中同時(shí)保存數(shù)據(jù)
使用 push()
你可以在保存模型數(shù)據(jù)的同時(shí),將所關(guān)聯(lián)的數(shù)據(jù)也保存下來(lái):
class User extends Model { public function phone() { return $this->hasOne('App\Phone'); } } $user = User::first(); $user->name = "GeiXue"; $user->phone->number = '1234567890'; $user->push(); // 最后這一行 push() 會(huì)將 user 的數(shù)據(jù)和 phone 的數(shù)據(jù)同時(shí)更新到數(shù)據(jù)庫(kù)中
5.自定義 deleted_at 字段
如果你使用過(guò) Laravel 的軟刪除 Soft Delete 的話,你應(yīng)該就知道其實(shí) Laravel 在標(biāo)記一個(gè)記錄為已刪除的狀態(tài)其實(shí)是用 deleted_at
這個(gè)字段來(lái)維護(hù)的,其實(shí)你是可以自定義這個(gè)字段的:
class User extends Model { use SoftDeletes; * The name of the "deleted at" column. * * @var string */ const DELETED_AT = 'deleted_date'; }
或者你這樣自定義也可以:
class User extends Model { use SoftDeletes; public function getDeletedAtColumn() { return 'deleted_date'; } }
6.獲取已修改的 Model 屬性
使用 getChanges()
方法獲取已被修改的屬性:
$user->getChanges() //[ "name" => "GeiXue", ]
7.檢查 Model 是否被修改
使用 isDirty()
方法就可以檢測(cè)模型中的數(shù)據(jù)是否被修改:
$user = App\User::first(); $user->isDirty(); //false $user->name = "GeiXue"; $user->isDirty(); //true
在使用 isDirty()
的時(shí)候,你也可以直接檢測(cè)某個(gè)屬性是否被修改:
$user->isDirty('name'); //true $user->isDirty('age'); //false
8.獲取 Model 的原始數(shù)據(jù)
在給 Model 的屬性賦予新值的時(shí)候,你可以通過(guò) getOriginal()
來(lái)獲取原來(lái)的值:
$user = App\User::first(); $user->name; //JellyBool $user->name = "GeiXue"; //GeiXue $user->getOriginal('name'); //JellyBool $user->getOriginal(); //Original $user record
9.刷新 Model 的數(shù)據(jù)
使用 refresh()
刷新 Model 的數(shù)據(jù),這在你使用 tinker
的時(shí)候特別有用:
$user = App\User::first(); $user->name; // JellyBool // 這個(gè)時(shí)候在其他地方,該用戶的名字被更新為 GeiXue,你可以使用 refresh 來(lái)刷新,而不用退出 tinker $user->refresh(); $user->name; // GeiXue
最后
上面的九個(gè) Eloquent 特性其實(shí)在特定的應(yīng)用場(chǎng)景是非常有用的,希望能在你開(kāi)發(fā) Laravel 項(xiàng)目的時(shí)候幫到你一點(diǎn)點(diǎn)。Happy Hacking
以上就是Laravel Eloquent的九個(gè)實(shí)用特性詳解的詳細(xì)內(nèi)容,更多關(guān)于Laravel Eloquent特性的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Laravel框架使用Seeder實(shí)現(xiàn)自動(dòng)填充數(shù)據(jù)功能
這篇文章主要介紹了Laravel框架使用Seeder實(shí)現(xiàn)自動(dòng)填充數(shù)據(jù)功能,結(jié)合實(shí)例形式分析了Laravel基于Seeder類實(shí)現(xiàn)自動(dòng)填充數(shù)據(jù)的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-06-06Google Voice 短信發(fā)送接口PHP開(kāi)源版(2010.5更新)
Google Voice 短信發(fā)送接口PHP開(kāi)源版,以前的版本不能用了,作者于2010年5月進(jìn)行了更新。2010-07-07基于ThinkPHP5框架使用QueryList爬取并存入mysql數(shù)據(jù)庫(kù)操作示例
這篇文章主要介紹了基于ThinkPHP5框架使用QueryList爬取并存入mysql數(shù)據(jù)庫(kù)操作,結(jié)合實(shí)例形式分析了thinkPHP5框架整合QueryList爬取數(shù)據(jù)存入mysql相關(guān)操作技巧及注意事項(xiàng),需要的朋友可以參考下2019-05-05PHP http請(qǐng)求超時(shí)問(wèn)題解決方案
這篇文章主要介紹了PHP http請(qǐng)求超時(shí)問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11