Laravel5实现嵌套评论的形式(代码详解)

本篇文章给大家带来的内容是关于laravel5实现嵌套评论的形式(代码详解),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

经常我们看见评论显示形式有很多,比如’@’某某,又或者像知乎的收缩式的评论,又或者是嵌套式的评论,那么最一开始也是最常见的就是嵌套式评论,因为这个更加醒目.

准备工作

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()函数来显示,那么我们试图的结构如下:

 - commentscomments.blade.phpform.blade.phplist.blade.php - postsshow.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

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

最终效果图如下

3065081519-5c1b8b4ace9e2_articlex.gif

以上就是Laravel5实现嵌套评论的形式(代码详解)的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/112480.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月23日 21:18:49
下一篇 2025年11月23日 21:49:21

相关推荐

  • PHPStan:通过静态分析提高 PHP 代码质量

    在动态类型盛行的 php 生态系统中,管理代码质量并确保无错误开发可能具有挑战性。 phpstan 是一款专为 php 定制的静态分析工具,旨在帮助开发人员在运行代码之前捕获错误和潜在问题。通过静态分析,phpstan 允许开发人员通过在开发早期捕获错误来编写更可靠、可维护和健壮的代码。在这篇文章中…

    2025年12月9日
    000
  • NexaPHP 简介:轻量级 MVC PHP 框架

    构建 php 应用程序通常涉及大量样板代码和组织以保持干净的结构。许多开发人员使用 laravel 或 symfony 等框架来处理此问题,但如果您只需要一个轻量级、简单的 mvc(模型-视图-控制器)框架怎么办? nexaphp 可能正是您正在寻找的。这个极简主义框架是为那些想要精益结构而没有大型…

    2025年12月9日
    000
  • 如何在 Laravel 中包含 JavaScript 适用于所有场景的分步指南

    如何在 laravel 11 中包含 javascript:适用于所有场景的分步指南 在 laravel 11 中,向项目添加 javascript 变得轻而易举,这要归功于默认的资源捆绑器 vite。以下是如何为各种场景设置 javascript,从全局包含到特定视图中的条件加载。 1. 在所有文…

    2025年12月9日
    000
  • Laravel 观察者:应用程序生命周期中的沉默忍者

    简介 想象一下,每当您在网站上提交表单时,一个隐形助手就会进来并再次检查所有内容。添加更多详细信息,甚至无需您费力即可发送一封欢迎信。 laravel 观察者就像默默工作的幕后助手。而且它的功能强大,可以在您需要时处理所有任务。在这篇文章中,我们将深入探讨观察者在 laravel 中的工作方式,以及…

    2025年12月9日
    000
  • Laravel 应用程序安全

    构建安全的 Laravel 应用程序有时可能感觉像是事后诸葛亮,但 Stephen Rees-Carter 在 Laracon AU 2024 上放弃了一些严肃的知识,这让我重新思考了一些事情。 Stephen 是一位有道德的黑客,他目睹了这一切——我的意思是他侵入了很多 Laravel 应用程序,…

    2025年12月9日
    000
  • 在 Laravel Livewire 中使用多个图像选择

    在本文中,我将向您展示一个简单的想法,当您想使用 livewire 和 laravel 来选择更多图像时,可以修复先前选择的图像丢失的问题。 我知道有多种方法可以实现这一点,但我发现在一些 livewire 生命周期钩子的帮助下这个方法非常简单,这些是 更新和更新的挂钩。 此屏幕截图显示了您的 li…

    2025年12月9日
    000
  • 如何用php代码建表

    如何在 PHP 中使用 MySQL 创建表?连接到 MySQL 数据库。编写 CREATE TABLE 语句,指定新表及其列的结构。使用 mysqli_query() 函数执行 CREATE TABLE 语句。 如何在 PHP 中使用 MySQL 创建表 在 PHP 中使用 MySQL 创建表,需要…

    2025年12月9日
    000
  • 如何搭建nginx php

    搭建 Nginx + PHP 服务器共需要 6 个步骤:1. 安装 Nginx;2. 安装 PHP;3. 安装 PHP-FPM Nginx 模块;4. 配置 Nginx,创建配置文件并设置监听端口、服务器名称、根目录、文件查找顺序等;5. 配置 PHP,调整 PHP-FPM 池设置,包括监听端口、用…

    2025年12月9日
    000
  • php中不允许使用关键字来为变量命名吗

    PHP不允许使用关键字作为变量名,因为关键字是预先定义的保留字,用于特定语法目的,如abstract、case、const、default等。而魔法方法__call()和__get()允许在特殊情况下使用关键字,但对于常规变量命名,建议避免使用关键字,以防止编译时错误和潜在冲突。 PHP中允许使用关…

    2025年12月9日
    000
  • 前端和企业 PHP 开发者,哪个 IDE 更适合你?

    php ide 比较 对于偏向于前端和企业发展的 PHP 开发人员,这里推荐几个好用且专业的 IDE 选项: PHPStorm PHPStorm 是 JetBrains 开发的一款强大的 PHP IDE,深受开发人员的喜爱。它提供了许多高级功能,包括: 智能代码完成代码重构和重构版本控制集成调试和性…

    2025年12月9日
    000
  • New in EasyAdmin: Pretty URLs

    easyadmin 最受欢迎的功能刚刚在 4.14.0 版本中推出。 从第一天开始,easyadmin 就使用查询字符串参数来传递必要的渲染后端页面的信息。这种方法创建的 url 如下: https://example.com/admin?crudaction=edit&crudcontro…

    2025年12月9日
    100
  • 如何学习 PHP

    PHP 是一种编程语言,具有相对简单但通用的语法,使其成为初学者的一个很好的起点。然而,您可能仍然对第一次实现 PHP 代码的想法感到不知所措。还好,有很多 您可以用来学习 PHP 的免费资源。无论您是否观看过一些 YouTube 教程或参加在线课程,您可以快速熟悉 使用这种流行的编程语言。 在这篇…

    2025年12月9日
    300
  • Laravel 显示存储文件夹中的图像示例

    在这篇文章中,我将向您展示如何在 laravel 11 应用程序中显示存储应用公共文件夹中的图像。 laravel 提供了一种安全的方式将图像和文件存储在 storage 文件夹中,防止用户通过 url 直接访问文件。那么,我们如何才能显示存储文件夹中的这些图像呢?下面,我将概述两种可用于安全地显示…

    2025年12月9日
    000
  • Laravel Google Recaptcha 验证教程

    在这篇文章中,我将向您展示 laravel 11 google recaptcha v3 验证教程。 google recaptcha v3 是一个类似验证码的系统,可提供针对黑客和脚本或 curl 请求的安全保护。它确保计算机用户是人类。它是最好和最常用的验证码系统,用户只需单击复选框,并在某些情…

    2025年12月9日
    000
  • 如何在 PHP CodeIgniter 中生成 Pdf sing *dompdf*

    第 1 步:创建数据库表在 mysql 数据库中创建用户表: create table users ( id int auto_increment primary key, name varchar(50) not null, surname varchar(50) not null, email …

    2025年12月9日
    000
  • Lithe Crypt:简化 PHP 应用程序中的加密

    lithe crypt 是一个简单的 php 加密和解密实用程序,旨在与 lithe 框架配合使用。它利用 aes-256-cbc 算法进行安全数据处理。 安装 要安装 lithe crypt 软件包,您可以使用 composer。如果您尚未安装,请确保 composer 在您的系统上可用。然后在项…

    2025年12月9日
    000
  • Lithe Crypt:简化 PHP 应用程序中的加密技术

    lithe crypt 是 php 中的一个简单的加密和解密实用程序,旨在与 lithe 框架配合使用。它使用 aes-256-cbc 算法进行安全数据处理。 安装 要安装 lithe crypt 软件包,您可以使用 composer。如果您尚未安装,请确保 composer 在您的系统上可用。然后…

    2025年12月9日
    000
  • Lithe Mail:简化 PHP 应用程序中的电子邮件发送

    你好,社区!今天,我想向您介绍 lithe mail,这是一个简化在 php 应用程序中通过 smtp 发送电子邮件的软件包。它提供与环境变量的灵活集成,使配置变得容易。让我们看看如何设置并在您的项目中使用它。 安装 您可以通过 composer 安装该软件包。在终端中运行以下命令: compose…

    2025年12月9日
    000
  • 使用 PHP 集成 Lloyds 支付卡:Cardnet 托管支付页面(连接解决方​​案)

    介绍 集成安全可靠的支付网关对于电子商务业务至关重要。劳埃德银行的 cardnet® 托管支付页面解决方案 connect 提供了一种安全的交易处理方式。客户将被重定向到劳埃德托管的页面以完成交易,然后返回您的网站。以下是您如何设置它、将其与 php 集成并为您的用户提供无缝体验的方法。 lloyd…

    2025年12月9日
    000
  • Laravel Nightwatch:Laravel 应用程序监控的未来在 Laracon AU 上揭晓

    随着 Laracon AU 发布 Laravel Nightwatch,Laravel 的生态系统不断扩展 – 一个专门为 Laravel 应用程序设计的复杂监控平台。 Nightwatch 将于 2025 年第一季度抢先体验,承诺彻底改变开发者监控和维护 Laravel 应用程序的方式…

    2025年12月9日
    000

发表回复

登录后才能评论
关注微信