成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Laravel 5.4 入門系列 10.文章歸檔

Nekron / 1346人閱讀

摘要:將上述的一系列查詢進(jìn)行封裝模型到了這一步,我們基本上實(shí)現(xiàn)了文章歸檔的功能。但是有一個(gè)問題,文章歸檔實(shí)際上包括在通用視圖中,這就意味著,網(wǎng)站的所有請(qǐng)求都需要返回,否則就會(huì)報(bào)錯(cuò)。數(shù)據(jù)庫之?dāng)?shù)據(jù)庫請(qǐng)求構(gòu)建器中文文檔的視圖功能中文文檔

首先,要實(shí)現(xiàn)的是按照日期來統(tǒng)計(jì)文章,原始的 SQL 如下:

select 
    year(created_at)  year,
    monthname(created_at) month,
    count(*) published
from posts
group by year, month
order by min(created_at) desc;

將其轉(zhuǎn)化為 Eloquent Model:

/app/Http/Controllers/PostsController.php
use AppPost;
public function index()
{    

    $archives = Post::selectRaw("year(created_at)  year, monthname(created_at) month, count(*) published")
                    ->groupBy("year","month")
                    ->orderByRaw("min(created_at) desc")
                    ->get();

    $posts = Post::latest()->get();

    return view("posts.index",compact("posts","archives"));
}

視圖中顯示對(duì)應(yīng)的文章歸檔:

/resources/views/layouts/siderbar.blade.php
  

用戶點(diǎn)擊某個(gè)月份的時(shí)候,向后臺(tái)傳入 monthyear 參數(shù),因此 index 方法還需要根據(jù)參數(shù)類型來進(jìn)行選擇:

/app/Http/Controllers/PostsController.php
use CarbonCarbon;
public function index()
{    

    $archives = Post::selectRaw("year(created_at)  year, monthname(created_at) month, count(*) published")->groupBy("year","month")->orderByRaw("min(created_at) desc")->get();


    $posts = Post::latest();

    if ($month = request("month")) {
        $posts->whereMonth("created_at",Carbon::parse($month)->month);
    }

    if ($year = request("year")) {
        $posts->whereYear("created_at",$year);
    }

    $posts = $posts->get();

    return view("posts.index",compact("posts","archives"));
}

這里使用了 Laravel 提供的 whereDate 系列方法,同時(shí),月份用 Carbon 進(jìn)行轉(zhuǎn)換。

將上述的一系列查詢進(jìn)行封裝:

/app/Http/Controllers/PostsController.php
public function index()
{    

    $archives = Post::archives();
    $posts = Post::latest()
                ->filter(request(["year","month"]))
                ->get();

    return view("posts.index",compact("posts","archives"));
}

模型:

/app/Post.php
use CarbonCarbon;
public function scopeFilter($query, $value)
{
    if ($month = $value["month"]) {
        $query->whereMonth("created_at", Carbon::parse($month)->month);
    }

    if ($year = $value["year"]) {
        $query->whereYear("created_at", $year);
    }
}

public static function archives()
{
    return static::selectRaw("year(created_at)  year, monthname(created_at) month, count(*) published")
                ->groupBy("year","month")
                ->orderByRaw("min(created_at) desc")
                ->get();
}

到了這一步,我們基本上實(shí)現(xiàn)了文章歸檔的功能。但是有一個(gè)問題,文章歸檔實(shí)際上包括在通用視圖中,這就意味著,網(wǎng)站的所有請(qǐng)求都需要返回 $archives,否則就會(huì)報(bào)錯(cuò)。一種做法就是在不同方法下都調(diào)用 archives() 方法來返回?cái)?shù)據(jù)。當(dāng)然,更為簡單的方法就是使用「視圖共享數(shù)據(jù)」功能。操作如下:

/app/Providers/AppServiceProvider.php
public function boot()
{
    Schema::defaultStringLength(191);
    view()->composer("layouts.siderbar",function($view){

        $view->with("archives",AppPost::archives());

    });
}

該服務(wù)提供者包含兩個(gè)方法:register(),用來綁定 IOC 容器(先忽略),綁定完之后,我們就可以在 boot 里面定義我們想要實(shí)現(xiàn)的功能了,在該例中,我們注冊(cè)了 layouts.siderbar 視圖,并傳遞給視圖 archives 變量。


Laravel 數(shù)據(jù)庫之:數(shù)據(jù)庫請(qǐng)求構(gòu)建器 | Laravel 5.4 中文文檔

Carbon - A simple PHP API extension for DateTime.

Laravel 的視圖功能 | Laravel 5.4 中文文檔

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22773.html

相關(guān)文章

  • Laravel 5.4 入門系列 7. 文章的顯示

    摘要:為的輔助方法,用于截取字符串的前個(gè)字符,然后返回前個(gè)字符加的格式。顯示某篇文章顯示某篇文章的比較簡單,路由注意要放在下面,假如這樣那么,我們?cè)L問的時(shí)候,會(huì)被當(dāng)成是的查詢參數(shù)。 文章的顯示功能比較簡單,分為兩部分: 文章列表 具體的某篇文章 顯示文章列表 路由之前已經(jīng)定義好: Route::get(/posts,PostsController@index); 控制器: public ...

    kuangcaibao 評(píng)論0 收藏0
  • Laravel 5.4 入門系列 8. 文章評(píng)論

    摘要:編輯遷移文件我們?yōu)楸砀裉砑恿送怄I,同時(shí)生定義了約束,該約束允許刪除父表文章的時(shí)候,自動(dòng)刪除關(guān)聯(lián)的子表評(píng)論。關(guān)聯(lián)中文文檔的輔助函數(shù)列表中文文檔 本節(jié)將學(xué)習(xí) Eloquent Relations,表與表之間存在著多種關(guān)系,舉例如下: 一對(duì)一:文章與作者 一對(duì)多:文章與評(píng)論 多對(duì)多:標(biāo)簽與文章 文章與評(píng)論的一對(duì)多關(guān)系 一對(duì)多關(guān)系,主要理解兩點(diǎn): 如何實(shí)現(xiàn)一對(duì)多關(guān)系 實(shí)現(xiàn)了之后能給開發(fā)帶...

    IntMain 評(píng)論0 收藏0
  • Laravel 5.4 入門系列 6. 文章的創(chuàng)建

    摘要:基本功能創(chuàng)建文章的第一步是用戶發(fā)請(qǐng)求,然后返回創(chuàng)建文章的頁面。實(shí)際上,會(huì)報(bào)錯(cuò)添加保護(hù)雖然我們完成了基本功能,但是提交請(qǐng)求的時(shí)候還是會(huì)報(bào)錯(cuò),其實(shí)這是防止攻擊。假如違反了規(guī)則,錯(cuò)誤信息會(huì)自動(dòng)被保存在閃存的中,即只對(duì)下一次請(qǐng)求生效。 基本功能 創(chuàng)建文章的第一步是用戶發(fā)請(qǐng)求,然后返回創(chuàng)建文章的頁面。 路由:處理用戶「創(chuàng)建文章」的請(qǐng)求 /routes/web.php Route::get(/po...

    levius 評(píng)論0 收藏0
  • Laravel 5.4 入門系列 9. 注冊(cè)與登錄,用戶關(guān)聯(lián)

    摘要:本節(jié)將實(shí)現(xiàn)文章評(píng)論與用戶關(guān)聯(lián)的功能。關(guān)系定義首先修改與表,增加字段增加全部回滾并重新執(zhí)行遷移添加用戶表與文章表評(píng)論表的一對(duì)多關(guān)系添加文章評(píng)論表與用戶表的多對(duì)一關(guān)系同時(shí),評(píng)論表的字段增加。同時(shí),我們還自定義了返回的錯(cuò)誤信息。 本節(jié)將實(shí)現(xiàn)文章、評(píng)論與用戶關(guān)聯(lián)的功能。 關(guān)系定義 首先修改 posts 與 comments 表,增加 user_id 字段 /database/migratio...

    smallStone 評(píng)論0 收藏0
  • Laravel 5.4 入門系列 3. 任務(wù)列表顯示

    摘要:熟悉了路由與視圖的基本操作之后,我們來讓視圖顯示一個(gè)任務(wù)列表吧。創(chuàng)建遷移現(xiàn)在,我們就可以創(chuàng)建一個(gè)用來生成任務(wù)表的遷移了。 熟悉了路由與視圖的基本操作之后,我們來讓視圖顯示一個(gè)任務(wù)列表吧。主要知識(shí)點(diǎn): 數(shù)據(jù)遷移 查詢構(gòu)造器 數(shù)據(jù)庫 創(chuàng)建數(shù)據(jù)庫 首先創(chuàng)建一個(gè)數(shù)據(jù)庫: $ mysql -uroot -p mysql> create database laratasks; 數(shù)據(jù)庫配置 La...

    SunZhaopeng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<