IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> laravel评论列表模糊搜索及优化 -> 正文阅读

[PHP知识库]laravel评论列表模糊搜索及优化

一、评价管理列表api

1.1 创建评价表模型及迁移文件

运行命令:php artisan make:model Comment -m
在这里插入图片描述

1.2 完成评论表字段

Schema::create('comments', function (Blueprint $table) {
            $table->id();
            $table->integer('user_id')->comment('评论的用户');
            $table->integer('goods_id')->comment('所属商品');
            $table->integer('rate')->default(1)->comment('评论的类别:1->好评,2->中评,3->差评');
            $table->string('content')->comment('评论的内容');
            $table->string('reply')->nullable()->comment('商家的回复');
            $table->json('pics')->nullable()->comment('多个评论图');
            $table->timestamps();
        });

在这里插入图片描述

执行迁移命令:php artisan migrate生成迁移表
在这里插入图片描述

1.3 创建评论控制器

创建评论资源控制器用来处理评论相关的业务逻辑:
运行命令:php artisan make:controller Admin/CommentController --api
在这里插入图片描述

1.4 创建评价相关路由

            /*
             * 评价管理
             */
            // 评价列表
            $api->get('comments', [CommentController::class, 'index']);

            // 评价详情
            $api->get('comments/{comment}', [CommentController::class, 'show']);

            // 回复评价
            $api->get('comments/{comment}/reply', [CommentController::class, 'reply']);

在这里插入图片描述
因为这里的评价是由用户端去添加的,我们这边手动往数据库中添加一些数据,进行测试。
在这里插入图片描述

1.5 创建评价transformer

创建评价CommentTransformer.php写入如下格式化代码:

<?php 

namespace App\Transformers;

use App\Models\Comment;
use League\Fractal\TransformerAbstract;

class CommentTransformer extends TransformerAbstract {

    public function transform(Comment $comment) {
        return [
            'id' => $comment->id,
            'content' => $comment->content,
            'user_id' => $comment->user_id,
            'goods_id' => $comment->goods_id,
            'rate' => $comment->rate,
            'reply' => $comment->reply,
            'updated_at' => $comment->updated_at,
            'created_at' => $comment->created_at,
        ];
    }

}

在这里插入图片描述

1.6 评价列表控制器方法

    /**
     * 评价列表
     */
    public function index(Request $request)
    {
        // 获取搜索条件
        $rate = $request->query('rate');

        // 商品的名称模糊搜索评价
        $goods_title = $request->query('goods_title');

        $comments = Comment::when($rate, function ($query) use ($rate) {
                        $query->where('rate', $rate);
                    })
                    -> when($goods_title, function ($query) use ($goods_title){
                        // 先查询相关的商品id
                        $goods_ids = Good::where('title', 'like', "%{$goods_title}%")->pluck('id');
                        $query->whereIn('goods_id', $goods_ids);
                    })
                    ->paginate(1);
        return $this->response->paginator($comments, new CommentTransformer());
    }

在这里插入图片描述

rate管理员可以通过搜索好评中评差评来搜索对应的数据
goods_title管理员可以通过搜索商品的名称进行模糊搜索对应数据

1.7 测试

在这里插入图片描述
在这里插入图片描述

二、优化

从以上的测试中我们可以知道,当前有了评价,但是我们还想知道是哪个用户评价的,以及评价的是哪个商品,所以接下来修改评价的transformer
定义一个受保护的属性,可以让它引入一些内容:

    // 可include的方法
    protected $availableIncludes = ['user', 'goods'];
    // 用户数据
    public function includeUser(Comment $comment) {
        return $this->item($comment->user, new UserTransformer());
    }

    // 商品数据
    public function includeGoods(Comment $comment) {
        return $this->item($comment->goods, new GoodTransformer());
    }

在这里插入图片描述


修改评价模型进行对用户的关联:

    /**
     * 评论所属用户
     */
    public function user() {
        // 评价是属于用户
        return $this->belongsTo(User::class, 'user_id', 'id');
    }

    /**
     * 评论所属商品
     */
    public function goods() {
        // 评价是属于用户
        return $this->belongsTo(Good::class, 'goods_id', 'id');
    }

在这里插入图片描述


测试结果:
在这里插入图片描述
在这里插入图片描述
但是评论如果用户有上传多图的话,那么也是一样的处理,我们加上对多图的处理模拟数据:
在这里插入图片描述
同样这边多图是json类型的我们同样在评论模型中加上强制类型转换:
在这里插入图片描述

CommentTransformer.php加上:
在这里插入图片描述
效果:
在这里插入图片描述

在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-08-23 16:25:23  更:2021-08-23 16:25:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/13 0:52:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码