国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Laravel 5系列教程八:queryScope 和 setAttribute

FreeZinG / 2919人閱讀

摘要:注意在文件頭部使用來引入。比如我們想使用這個方法,就定義為??偨Y又是最后的結尾了,這里我們簡單的介紹了和的用法,下一節打算說說的一個重要的內容。那個時候也就會越來越覺得的強大了。

原文來自 https://laravist.com/article/16

免費視頻教程地址 https://laravist.com/series/laravel-5-basic

Laravist是我剛剛上線的Laravel社區,有任何與Laravel相關的問題可以到這里來問我,我會盡力去幫大家解決問題,后期會嘗試錄制一些視頻教程,形式大概是這樣的

https://laravist.com/lesson/1

直接就是按照上一節所說的那樣,我們來說說queryScope和setAttribute在laravel的用法。

關于應用場景

這里我首先是想向大家簡單說說這兩個知識點得應用場景是什么,我們在開發的時候,總是希望有一種偷懶的方式,所以考慮以下這兩個場景:

數據在存入數據庫的時候需要進行預先處理,比如考慮一個簡單地例子:我們在保存用戶的登錄密碼的時候,都是需要將密碼用某種方式加密過后在寫入數據庫的,我們難道在每一次在提交表單過來之后都對傳過來的數據進行一次數據加密么?能不能有一種自動完成對密碼入庫前就加密的機制呢?這樣我們在處理表單的時候就不用關心密碼加密的問題了

想一想我們在向用戶展示的數據是不是基本上都是從數據庫取的呢?那么往往我們會有很多的查詢語句,在這樣的情況之下很多的查詢語句可以就會重復,但是在寫代碼這一行中,一旦出現多個重復,基本上就會有優化方式存在,所以這個時候queryScope就派上用場了

setAttributes

之前,我們都是將published_at設置為文章創建的日期:

$input["published_at"] = Carbon::now();

然而這并不是我們想要的,我們希望有一種可以控制的方式,比如在表單之中設置文章的發布日期,所以,我們來實現一下:首先將published_at這個字段放到我們的form之中,在create.blade.php中,加入published_at 輸入框輸入:

{!! Form::label("published_at","發布日期") !!} {!! Form::input("date","published_at",date("Y-m-d"),["class"=>"form-control"]) !!}

這一段代碼加在textarea后面,這里使用了Form::input(),這個方法,因為Form這個類沒有類似Form::date()指定date的方法,所以我們使用Form::input()并指定input的類型為date,并使用date("Y-m-d")來指定默認值為文章發布當天,但是我們可以修改,我們來看看我們的頁面現在是什么樣的:

這里我們可以看到我們拿到了published_at這個字段了,這個時候,可以修改一下ArticleController中的store()方法的代碼了:

$input = $request->all();
$input["intro"] = mb_substr($request->get("content"),0,64);
Article::create($input);
return redirect("/");

我們刪除了$input["published_at"] = Carbon::now();這一行代碼,然后嘗試創建一篇文章來看看:

OK,到這里,文章可以創建成功了,但是如果我們看看數據庫當中的數據:

這里的日期設置成的格式并不是理想的模式,有沒有一種方式可以將其設置為跟created_atupdated_at一樣的呢?時分秒都可以知道的呢?這個時候就可以使用setAttribute來完成了,在Article.php中添加下面的方法:

public function setPublishedAtAttribute($date)
{
    $this->attributes["published_at"] = Carbon::createFromFormat("Y-m-d",$date);
}

這里注意這個寫法set+字段名+Attribute,還有的就是使用駝峰法。比如你要加密密碼的時候可以這樣:

public function setPasswordAttribute($passowrd)
{
    $this->attributes["password"] = Hash::make($passowrd);
    //僅僅是舉例
}

這里我們使用了Carbon這個類,因為我們還想將published_at字段作為Carbon對象來處理,這樣后期會有很大的好處。注意在文件頭部使用use CarbonCarbon;來引入Carbon。這個時候我們再來發表一次:

再來看看數據庫:

這樣一來格式是對了,那么再來為Article.php添加一行代碼使published_at作為Carbon對象來處理:

protected $dates = ["published_at"];

對這樣就完成了,關于更多地Carbon好處和使用特性,我們在后面再說。

queryScope

上面實現了用published_at實現了文章的發布日期,但是現在的文章展示還是原來的樣式,這并不是我們想要的結果,因為我們剛剛設置發表日期為9-12的文章(寫文章的時候為9-08)也展示出來了,我們得限制一下。首先我們可以在查詢的時候直接實現,比如在ArticleControllerindex()方法中將查詢語句寫成這樣:

$articles = Article::where("published_at","<=",Carbon::now())->latest()->get();

我們使用where()直接限制published_at時間小于或等于當前時間的文章才進行顯示,看看效果:

發現在未來時間發布的文章確實隱藏了,這樣貌似已經達到了目的,為什么還要引入qeuryScope這個用法呢?這是因為考慮到代碼的重用性,比如我們要是多個地方使用到Article::where("published_at","<=",Carbon::now())這個條件限制呢,我們有沒有一種方式可以將查詢語句寫成類似下面這種形式呢?

$articles = Article::latest()->published()->get();

就是直接使用published()這個自定義的方法來代替where("published_at","<=",Carbon::now())呢,這樣代碼可讀性也會更好。

所以我們就來說說,queryScope的用法了,想想我們之前設置published_at這個字段的目的:

我們希望可以對文章進行簡單地管理,比如我們在寫系列文章的時候,有可能一天寫了好幾篇,但是這種時候其實我們發一篇文章就好了,每天消化一篇文章就很不錯了,所以作為作者,我并不想還沒到發布日期的文章就展示給用戶看,但是,我寫了文章也想把它存入數據庫,讓它在該發布的日期自動顯示,這樣就好了。于是,我們可以好好利用一下published_at這個字段

在我們的Article.php中增加下面的方法:

public function scopePublished($query)
{
    $query->where("published_at","<=",Carbon::now());
}

這里注意一下寫法scope+自定義的方法名字,還有就是一如既往的駝峰法。比如我們想使用published()這個方法,就定義為scopePublished($query)。這個時候就可以真正的使用上面說的查詢了,在ArticleControllerindex()方法中:

$articles = Article::latest()->published()->get();

再去看看效果,相信你刷新之后還是一樣的。

總結

又是最后的結尾了,這里我們簡單的介紹了queryScope和setAttribute的用法,下一節打算說說Eloquent的一個重要的內容:Eloquent Relationship。那個時候也就會越來越覺得laravel的強大了。

最后:Happy Hacking

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21100.html

相關文章

  • Laravel 5系列教程七:表單驗證 Validation

    摘要:幾乎在每一個應用當中都會有表單,而有表單基本就離不開表單驗證。在中,其實可以說是有兩種方式來進行表單驗證使用和使用。然后,上面的驗證規則是對于和兩個字段,我們需要用戶為其填充內容,不能為空。 原文來自:https://laravist.com/article/15 免費視頻教程地址 https://laravist.com/series/laravel-5-basic Laravis...

    jindong 評論0 收藏0
  • Laravel 5 系列入門教程(一)【最適合中國人的 Laravel 教程

    摘要:原文發表在我的個人網站系列入門教程一最適合中國人的教程本教程示例代碼見大家在任何地方卡住,最快捷的解決方式就是去看我的示例代碼。在此我推薦一個全量中國鏡像。 原文發表在我的個人網站:Laravel 5 系列入門教程(一)【最適合中國人的 Laravel 教程】 本教程示例代碼見:https://github.com/johnlui/Learn-Laravel-5 大...

    EscapedDog 評論0 收藏0
  • Laravel 5 系列入門教程(四)【最適合中國人的 Laravel 教程】【完結】

    摘要:原文發表在我的個人網站系列入門教程四最適合中國人的教程本教程示例代碼見大家在任何地方卡住,最快捷的解決方式就是去看我的示例代碼。 原文發表在我的個人網站:Laravel 5 系列入門教程(四)【最適合中國人的 Laravel 教程】 本教程示例代碼見:https://github.com/johnlui/Learn-Laravel-5 大家在任何地方卡住,最快捷...

    jsummer 評論0 收藏0
  • Laravel 5 系列入門教程(二)【最適合中國人的 Laravel 教程

    摘要:原文發表在我的個人網站系列入門教程二最適合中國人的教程本教程示例代碼見大家在任何地方卡住,最快捷的解決方式就是去看我的示例代碼。 原文發表在我的個人網站:Laravel 5 系列入門教程(二)【最適合中國人的 Laravel 教程】 本教程示例代碼見:https://github.com/johnlui/Learn-Laravel-5 大家在任何地方卡住,最快捷...

    未東興 評論0 收藏0
  • Laravel 5 系列入門教程(三)【最適合中國人的 Laravel 教程

    摘要:原文發表在我的個人網站系列入門教程三最適合中國人的教程本教程示例代碼見大家在任何地方卡住,最快捷的解決方式就是去看我的示例代碼。教程三代碼快照下一步系列入門教程四最適合中國人的教程完結 原文發表在我的個人網站:Laravel 5 系列入門教程(三)【最適合中國人的 Laravel 教程】 本教程示例代碼見:https://github.com/johnlui/Learn-L...

    xcold 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<