手机Av在线不卡,99r这里只有精品11,一区二区啪啪啪网站,白虎美女在线

哈爾濱今日靈圖

[其他技能培訓(xùn)]
獵學(xué)網(wǎng)訂閱號(hào)
獵學(xué)網(wǎng)官方企業(yè)微信
位置: 獵學(xué)網(wǎng) > 學(xué)校機(jī)構(gòu) > 哈爾濱今日靈圖 > 學(xué)習(xí)資訊> Laravel Eloquent 小技巧

Laravel Eloquent 小技巧

252 2017-04-19

在大型的項(xiàng)目中使用LaravelEloquentORM,某些工作可能會(huì)變得重復(fù)和繁瑣,所以本文為大家總結(jié)了5個(gè)很少人知道的小技巧,在開(kāi)發(fā)過(guò)程中幫我節(jié)省了很多時(shí)間。下面就讓我們開(kāi)始吧。

1.快速生成Model&Migration

這并不是一個(gè)很多人知道的小技巧,在Laravel文檔中也沒(méi)有提到。下面我們以一個(gè)博客為簡(jiǎn)單的例子,為文章生成Model和Migration。

$phpartisanmake:migrationcreate_posts_table

$phpartisanmake:modelPost

大部分人可能會(huì)按上面這樣做,其實(shí)這兩條命令可以合并為下面這一條:

$phpartisanmake:modelPost-m

2.Eloquent查詢Scopes

還是以前面的博客應(yīng)用為例,假設(shè)我們的文章表有一個(gè)is_published字段,其值為0或1(表示False或True)。在博客列表,我們希望用戶只能看到已經(jīng)發(fā)布(published)的文章,使用Eloquent我們?nèi)绾芜^(guò)濾掉未發(fā)布的文章呢?答案很明顯,需要在查詢語(yǔ)句中使用where條件:

Post::where('is_published',true)->get();

這當(dāng)然可以,但如果我們想在其他地方重復(fù)使用這個(gè)代碼段呢?這么重復(fù)復(fù)制當(dāng)然也可以實(shí)現(xiàn),但為了符合DRY原則(Don’trepeatyourself),我們可以使用Eloquent的查詢Scope。在Post模型中創(chuàng)建ascopePublished方法:

classPostextendsModel

{

publicfunctionscopePublished($query)

{

return$this->where('is_published',true);

}

}

要獲取已發(fā)布文章,我們只需簡(jiǎn)單的調(diào)用如下命令:

Post::published()->get();

Eloquent可以自己把它翻譯為scopePublished方法。Eloquent模型中任何以scope開(kāi)始是方法都被當(dāng)做Eloquentscope。

值得注意的是,Eloquentscope的返回值必須是一個(gè)查詢生成器的實(shí)例,所以在scope中你不能調(diào)用->get()或->paginate()。

3.Accessors(訪問(wèn)器)

在很多情況下,你可能需要訪問(wèn)Eloquent模型在數(shù)據(jù)中并不存在,需要經(jīng)過(guò)一定計(jì)算的屬性,但很抱歉。我們來(lái)看一個(gè)例子。假設(shè)現(xiàn)在有一個(gè)User表,它包含這樣兩個(gè)字段:forenames和surname。如果你想在視圖中顯示用戶全名的話,你不得不這么做:

{{$user->forenames.''.$user->surname}}

首先,我們的應(yīng)用中可能有很多地方需要使用這段代碼,一遍又一遍的輸入顯然很不實(shí)際。其次,呃,語(yǔ)法非常的丑陋且顯得格格不入。下面我們來(lái)看看如何通過(guò)訪問(wèn)器(又稱屬性)使其變得更加整潔一些。我們?cè)赨ser模型中創(chuàng)建一個(gè)新的方法:

classUserextendsModel

{

publicfunctiongetNameAttribute()

{

return$this->forenames.''.$this->surname;

}

}

同Eloquent識(shí)別scope一樣,任何以get和Attribute包裹起來(lái)的方法都會(huì)當(dāng)做Eloquentaccesor(訪問(wèn)器)?,F(xiàn)在我們可以試著執(zhí)行下面的代碼段,它得到的結(jié)果和前面是相同的:

{{$user->name}}

這不僅可以重復(fù)使用,而且更容易輸入,并且更具有可讀性。

4.動(dòng)態(tài)方法名稱

……缺乏一個(gè)很好的術(shù)語(yǔ)。Eloquent對(duì)于一些方法特別的聰明,如where()??纯聪旅娴睦樱?/p>

//Post::where('published',1)->get();

Post::wherePublished(1)->get();

//Post::where('category',null)->get();

Post::whereNull('category')->get();

//Post::where('category','!=',null)->get();

Post::whereNotNull('category')->get();

是不是更加的整潔?

5.擴(kuò)展訪問(wèn)器

我們來(lái)擴(kuò)展一下#3。有時(shí)候,特別是使用API時(shí),當(dāng)我們使用Eloquent從數(shù)據(jù)庫(kù)獲取記錄時(shí),需要對(duì)返回的結(jié)果集中添加一些訪問(wèn)器(或者說(shuō)屬性)。如果沒(méi)看明白的話,看看下面這個(gè)例子。當(dāng)調(diào)用User::find(1)的時(shí)候,返回的結(jié)果看起來(lái)可能是下面這樣的:

{

id:1,

forenames:"Terry",

surname:"Harvey",

:"contact@terryharvey.co.uk",

created_at:"2016-05-0221:27:58",

updated_at:"2016-05-0318:09:37",

}

這并沒(méi)有什么問(wèn)題,但如果我們想在其中顯示前面創(chuàng)建的name屬性呢?讓我們回到模型中添加$appends屬性:

classUserextendsModel

{

protected$appends=['name'];

}

如果再次執(zhí)行前面的代碼,name屬性被直接添加到了結(jié)果中。

{

id:1,

forenames:"Terry",

surname:"Harvey",

name:"TerryHarvey",

:"contact@terryharvey.co.uk",

created_at:"2016-05-0221:27:58",

updated_at:"2016-05-0318:09:37",

}

溫馨提示: 專業(yè)老師1對(duì)1為您解答    馬上填寫,¥1000 元豪禮免費(fèi)領(lǐng)!

掃一掃
獲取更多福利

×
獵學(xué)網(wǎng)
加勒比高清一区二区| 国产人妖二区| 中文字色噜噜av| 麻豆国产91精品一区二区| 久久美逼| 国产无码爱做视频| 精国产九九九屁股视频| 性做久久久久久久久久久久久久| 精品国产一区二区小说| 男人的天堂自拍蜜臀| 亚奶视频网址在线观看| 日本久久久久久久人妻视频| 91视频精品网| 天天影院天天干天天射| 伊春市| 成人网站综合在线观看| 高清无码中文字幕日日骚| 人人干国产| 亚洲婷婷久网| 操美女骚逼播放| 夫妻在线视频一区二区三区| 欧美草比xxx| 日韩综合3p| 精品久久一区三区二区| 香港三日本三级少妇66| 麻豆传影院在线| 少妇中文字幕精精品无碼| 国产韩国一区二区| 色婷婷香蕉在线一区二区| 久草日B一区二区三区| 欧美+国产+午码+麻豆| 国产精品久久久1024| 日韩理伦片中文字幕| 九九九毛片| 免费欧美操逼视频| 色欲日本一区亚洲一区| 欧美自拍偷拍综合图区| 都市五月国产精品一区| 人妻精品巨| 国产大鸡巴九色吧| 久久性爱视|