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

資訊專欄INFORMATION COLUMN

Laravel 5~嵌套評(píng)論的實(shí)現(xiàn)

ethernet / 1334人閱讀

摘要:經(jīng)常我們看見(jiàn)評(píng)論顯示形式有很多,比如某某,又或者像知乎的收縮式的評(píng)論,又或者是嵌套式的評(píng)論,那么最一開(kāi)始也是最常見(jiàn)的就是嵌套式評(píng)論,因?yàn)檫@個(gè)更加醒目準(zhǔn)備工作設(shè)計(jì)三張表,表結(jié)構(gòu)如下層文件一篇文章有

經(jīng)常我們看見(jiàn)評(píng)論顯示形式有很多,比如"@"某某,又或者像知乎的收縮式的評(píng)論,又或者是嵌套式的評(píng)論,那么最一開(kāi)始也是最常見(jiàn)的就是嵌套式評(píng)論,因?yàn)檫@個(gè)更加醒目.

準(zhǔn)備工作
1.設(shè)計(jì)三張表users,posts,comments,表結(jié)構(gòu)如下:

users

Schema::create("users", function (Blueprint $table) {
    $table->increments("id");
    $table->string("name");
    $table->string("email")->unique();
    $table->string("password");
    $table->rememberToken();
    $table->timestamps();
});

posts

Schema::create("posts", function (Blueprint $table) {
    $table->increments("id");
    $table->string("title");
    $table->integer("user_id")->index();
    $table->text("content");
    $table->timestamps();
});

comments

Schema::create("comments", function (Blueprint $table) {
    $table->increments("id");
    $table->integer("user_id")->index();
    $table->integer("post_id")->index();
    $table->integer("parent_id")->index()->default(0);
    $table->text("body");
    $table->timestamps();
});

2.Model層:
Post.php文件

/**
 * 一篇文章有多個(gè)評(píng)論
 * @return IlluminateDatabaseEloquentRelationsHasMany
 */
public function comments()
{
    return $this->hasMany(Comment::class);
}

/**
 * 獲取這篇文章的評(píng)論以parent_id來(lái)分組
 * @return static
 */
public function getComments()
{
    return $this->comments()->with("owner")->get()->groupBy("parent_id");
}

Comments.php文件

/**
 * 這個(gè)評(píng)論的所屬用戶
 * @return IlluminateDatabaseEloquentRelationsBelongsTo
 */
public function owner()
{
    return $this->belongsTo(User::class, "user_id");
}

/**
 * 這個(gè)評(píng)論的子評(píng)論
 * @return IlluminateDatabaseEloquentRelationsHasMany
 */
public function replies()
{
    return $this->hasMany(Comment::class, "parent_id");
}

邏輯編寫
我們所要實(shí)現(xiàn)的嵌套評(píng)論其實(shí)在我們準(zhǔn)備工作中已經(jīng) 有點(diǎn)思路了,我們首先將一篇文章顯示出來(lái),同時(shí)利用文章與評(píng)論的一對(duì)多關(guān)系,進(jìn)行顯示所有的評(píng)論,但是我們的評(píng)論里面涉及到一個(gè)字段就是parent_id,這個(gè)字段其實(shí)非常的特殊,我們利用這個(gè)字段來(lái)進(jìn)行分組, 代碼就是上面的return $this->comments()->with("owner")->get()->groupBy("parent_id"),具體的過(guò)程如下:

web.php文件

Auth::loginUsingId(1); //用戶id為1的登錄

//顯示文章和相應(yīng)的評(píng)論
Route::get("/post/show/{post}", function (AppPost $post) {
    $post->load("comments.owner");
    $comments = $post->getComments();
    $comments["root"] = $comments[""];
    unset($comments[""]);
    return view("posts.show", compact("post", "comments"));
});

//用戶進(jìn)行評(píng)論
Route::post("post/{post}/comments", function (AppPost $post) {
    $post->comments()->create([
        "body" => request("body"),
        "user_id" => Auth::id(),
        "parent_id" => request("parent_id", null),
    ]);
    return back();
});

視圖代碼
視圖方面我們需要實(shí)現(xiàn)嵌套,那么隨著用戶互相評(píng)論的越來(lái)越多的話,那么嵌套的層級(jí)也就越多,所以說(shuō),我們這里需要使用各小技巧來(lái)顯示整個(gè)評(píng)論,我們使用@include()函數(shù)來(lái)顯示,那么我們?cè)噲D的結(jié)構(gòu)如下:

 - comments
comments.blade.php
form.blade.php
list.blade.php

 - posts
show.blade.php

代碼如下:
show.blade.php




    
    
    
    


{{$post->title}}

{{$post->content}}


@include("comments.list",["collections"=>$comments["root"]])

留下您的評(píng)論

@include("comments.form",["parentId"=>$post->id])

comment.blade.php

{{$comment->owner->name}}:
{{$comment->body}}
@include("comments.form",["parentId"=>$comment->id]) @if(isset($comments[$comment->id])) @include("comments.list",["collections"=>$comments[$comment->id]]) @endif

form.blade.php

id."/comments")}}" accept-charset="UTF-8"> {{csrf_field()}} @if(isset($parentId)) @endif

list.blade.php

@foreach($collections as $comment)
    @include("comments.comment",["comment"=>$comment])
@endforeach

最終效果圖如下

最近在研究laravel,看到一個(gè)之前做過(guò)的功能,之前寫的比較繁瑣,特記錄下來(lái)。
摘自:
https://laravel-china.org/art...
https://laravel-china.org/art...

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/29840.html

相關(guān)文章

  • 使用 Baum 嵌套集合模型來(lái)實(shí)現(xiàn) Laravel 模型無(wú)限極分類

    摘要:本文經(jīng)授權(quán)轉(zhuǎn)自社區(qū)使用嵌套集合模型來(lái)實(shí)現(xiàn)模型的無(wú)限極分類說(shuō)明大家通常都是使用遞歸實(shí)現(xiàn)無(wú)限極分類,都知道遞歸效率很低,下面推薦一個(gè)的擴(kuò)展包,快速讓你的數(shù)據(jù)模型支持無(wú)限極樹狀層級(jí)結(jié)構(gòu),并且兼顧效率。 本文經(jīng)授權(quán)轉(zhuǎn)自 PHPHub 社區(qū) 使用 Baum 嵌套集合模型來(lái)實(shí)現(xiàn) Laravel 模型的無(wú)限極分類 說(shuō)明 大家通常都是使用遞歸實(shí)現(xiàn)無(wú)限極分類,都知道遞歸效率很低,下面推薦一個(gè) Larav...

    superPershing 評(píng)論0 收藏0
  • 個(gè)人整理, 閱讀過(guò)好文章 (每天隨時(shí)更新)

    摘要:大家有好的文章可以在評(píng)論下面分享出來(lái)共同進(jìn)步本文鏈接數(shù)組使用之道程序員進(jìn)階學(xué)習(xí)書籍參考指南教你在不使用框架的情況下也能寫出現(xiàn)代化代碼巧用數(shù)組函數(shù)框架中間件實(shí)現(xiàn)沒(méi)錯(cuò),這就是面向?qū)ο缶幊淘O(shè)計(jì)模式需要遵循的個(gè)基本原則令人困惑的在中使用協(xié)程實(shí)現(xiàn)多任 大家有好的文章,可以在評(píng)論下面分享出來(lái), 共同進(jìn)步! 本文github鏈接 php PHP 數(shù)組使用之道 PHP程序員進(jìn)階學(xué)習(xí)書籍參考指南 教你...

    Chiclaim 評(píng)論0 收藏0
  • laravel package收集

    摘要:查找保存下載用搭建自己的緩存?zhèn)}庫(kù)權(quán)限管理的好選擇基于封裝的后臺(tái)管理系統(tǒng),支持手機(jī)和端訪問(wèn)支付寶風(fēng)格的驗(yàn)證器后臺(tái)系統(tǒng)微信接口的部署腳本開(kāi)發(fā)的博客系統(tǒng)百度推送自動(dòng)記錄用戶行為擴(kuò)展一個(gè)項(xiàng)目管理系統(tǒng)根據(jù)生成對(duì)應(yīng)導(dǎo)航的狀態(tài) 1.debug https://github.com/barryvdh/l... showImg(https://segmentfault.com/img/bVmhWL); ...

    psychola 評(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)了之后能給開(kāi)發(fā)帶...

    IntMain 評(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

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

0條評(píng)論

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