摘要:經常我們看見評論顯示形式有很多,比如某某,又或者像知乎的收縮式的評論,又或者是嵌套式的評論,那么最一開始也是最常見的就是嵌套式評論,因為這個更加醒目準備工作設計三張表,表結構如下層文件一篇文章有
經常我們看見評論顯示形式有很多,比如"@"某某,又或者像知乎的收縮式的評論,又或者是嵌套式的評論,那么最一開始也是最常見的就是嵌套式評論,因為這個更加醒目.
準備工作
1.設計三張表users,posts,comments,表結構如下:
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文件
/** * 一篇文章有多個評論 * @return IlluminateDatabaseEloquentRelationsHasMany */ public function comments() { return $this->hasMany(Comment::class); } /** * 獲取這篇文章的評論以parent_id來分組 * @return static */ public function getComments() { return $this->comments()->with("owner")->get()->groupBy("parent_id"); }
Comments.php文件
/** * 這個評論的所屬用戶 * @return IlluminateDatabaseEloquentRelationsBelongsTo */ public function owner() { return $this->belongsTo(User::class, "user_id"); } /** * 這個評論的子評論 * @return IlluminateDatabaseEloquentRelationsHasMany */ public function replies() { return $this->hasMany(Comment::class, "parent_id"); }
邏輯編寫
我們所要實現的嵌套評論其實在我們準備工作中已經 有點思路了,我們首先將一篇文章顯示出來,同時利用文章與評論的一對多關系,進行顯示所有的評論,但是我們的評論里面涉及到一個字段就是parent_id,這個字段其實非常的特殊,我們利用這個字段來進行分組, 代碼就是上面的return $this->comments()->with("owner")->get()->groupBy("parent_id"),具體的過程如下:
web.php文件
Auth::loginUsingId(1); //用戶id為1的登錄 //顯示文章和相應的評論 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")); }); //用戶進行評論 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(); });
視圖代碼
視圖方面我們需要實現嵌套,那么隨著用戶互相評論的越來越多的話,那么嵌套的層級也就越多,所以說,我們這里需要使用各小技巧來顯示整個評論,我們使用@include()函數來顯示,那么我們試圖的結構如下:
- 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"]])留下您的評論
@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,看到一個之前做過的功能,之前寫的比較繁瑣,特記錄下來。
摘自:
https://laravel-china.org/art...
https://laravel-china.org/art...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/29840.html
摘要:本文經授權轉自社區使用嵌套集合模型來實現模型的無限極分類說明大家通常都是使用遞歸實現無限極分類,都知道遞歸效率很低,下面推薦一個的擴展包,快速讓你的數據模型支持無限極樹狀層級結構,并且兼顧效率。 本文經授權轉自 PHPHub 社區 使用 Baum 嵌套集合模型來實現 Laravel 模型的無限極分類 說明 大家通常都是使用遞歸實現無限極分類,都知道遞歸效率很低,下面推薦一個 Larav...
摘要:大家有好的文章可以在評論下面分享出來共同進步本文鏈接數組使用之道程序員進階學習書籍參考指南教你在不使用框架的情況下也能寫出現代化代碼巧用數組函數框架中間件實現沒錯,這就是面向對象編程設計模式需要遵循的個基本原則令人困惑的在中使用協程實現多任 大家有好的文章,可以在評論下面分享出來, 共同進步! 本文github鏈接 php PHP 數組使用之道 PHP程序員進階學習書籍參考指南 教你...
摘要:查找保存下載用搭建自己的緩存倉庫權限管理的好選擇基于封裝的后臺管理系統,支持手機和端訪問支付寶風格的驗證器后臺系統微信接口的部署腳本開發的博客系統百度推送自動記錄用戶行為擴展一個項目管理系統根據生成對應導航的狀態 1.debug https://github.com/barryvdh/l... showImg(https://segmentfault.com/img/bVmhWL); ...
摘要:編輯遷移文件我們為表格添加了外鍵,同時生定義了約束,該約束允許刪除父表文章的時候,自動刪除關聯的子表評論。關聯中文文檔的輔助函數列表中文文檔 本節將學習 Eloquent Relations,表與表之間存在著多種關系,舉例如下: 一對一:文章與作者 一對多:文章與評論 多對多:標簽與文章 文章與評論的一對多關系 一對多關系,主要理解兩點: 如何實現一對多關系 實現了之后能給開發帶...
摘要:本節將實現文章評論與用戶關聯的功能。關系定義首先修改與表,增加字段增加全部回滾并重新執行遷移添加用戶表與文章表評論表的一對多關系添加文章評論表與用戶表的多對一關系同時,評論表的字段增加。同時,我們還自定義了返回的錯誤信息。 本節將實現文章、評論與用戶關聯的功能。 關系定義 首先修改 posts 與 comments 表,增加 user_id 字段 /database/migratio...
閱讀 3208·2021-09-29 09:34
閱讀 3562·2021-09-10 10:51
閱讀 1961·2021-09-10 10:50
閱讀 6773·2021-08-12 13:31
閱讀 3011·2019-08-30 15:54
閱讀 1588·2019-08-30 15:44
閱讀 1437·2019-08-29 12:26
閱讀 2664·2019-08-26 18:36