摘要:經(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
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
摘要:本文經(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...
摘要:大家有好的文章可以在評(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í)書籍參考指南 教你...
摘要:查找保存下載用搭建自己的緩存?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); ...
摘要:編輯遷移文件我們?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ā)帶...
摘要:本節(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...
閱讀 3199·2021-09-29 09:34
閱讀 3551·2021-09-10 10:51
閱讀 1948·2021-09-10 10:50
閱讀 6731·2021-08-12 13:31
閱讀 3000·2019-08-30 15:54
閱讀 1560·2019-08-30 15:44
閱讀 1430·2019-08-29 12:26
閱讀 2654·2019-08-26 18:36