一、评价管理列表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){
$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 : 定义一个受保护的属性,可以让它引入一些内容:
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的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。
|