laravel商品列表管理数据以及模糊搜索api

810 阅读1分钟

这是我参与8月更文挑战的第29天,活动详情查看:8月更文挑战

一、商品添加api优化

1.1 添加之前检查分类

    /**
     * 添加商品
     */
    public function store(GoodsRequest $request)
    {
        // 对分类进行检查,是否存在,只能使用3级分类,并且分类不能被禁用
        $category = Category::find($request -> category_id);
        if (!$category) return $this->response->errorBadRequest('分类不存在!');
        if ($category->status == 0) return $this->response->errorBadRequest('分类被禁用!');
        if ($category->level != 3) return $this->response->errorBadRequest('只能向3级分类添加商品!');
        $user_id = auth('api')->id();
        $request->offsetSet('user_id', $user_id);
        Good::create($request->all());
        return $this->response->created();
    }

在这里插入图片描述


效果:

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


1.2 商品表加字段

我们发现在商品表中,商品名称字段忘记加了,我们有两种方法进行添加:

1、回滚重新执行迁移 (在项目初期使用) 2、加一个增加迁移文件的表(如果数据表里已有许多数据,建议采用这种修改)

我们这边选择第一种,因为第二种之前演示过了。 执行回滚命令 php artisan migrate:rollback 回滚上一次的迁移。 在这里插入图片描述 接着在迁移文件中将商品名称字段加上: $table->string('title')->comment('商品名称'); 在这里插入图片描述


然后重新执行迁移命令: php artisan migrate 在这里插入图片描述


修改表单验证: 在这里插入图片描述


接着修改商品模型: 在这里插入图片描述

1.3 测试效果

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

二、商品列表api

2.1 创建商品Transformer

Transformers下直接复制一个GoodTransformer.php

<?php 

namespace App\Transformers;

use App\Models\Category;
use App\Models\Good;
use League\Fractal\TransformerAbstract;

class GoodTransformer extends TransformerAbstract {
    protected $availableIncludes = ['category']; // 配置可用的关联

    public function transform(Good $good) {
        return [
            'id' => $good->id,
            'title' => $good->title,
            'category_id' => $good->category_id,
            // 'category_name' => Category::find($good->category_id) -> name,  // 处理好分类名称
            'description' => $good->description,
            'price' => $good->price,
            'stock' => $good->stock,
            'cover' => $good->cover,
            'pics' => $good->pics,
            'details' => $good->details,
            'is_on' => $good->is_on,
            'is_recommend' => $good->is_recommend,
            'created_at' => $good->created_at,
            'updated_at' => $good->updated_at,
        ];
    }

    public function includeCategory(Good $good) {
        return $this->item($good->category, new CategoryTransformer()); // 关联分类
    }

}
 

2.2 关联分类数据

Transformers创建CategoryTransformer.php,写入代码:

<?php 

namespace App\Transformers;

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

class CategoryTransformer extends TransformerAbstract {

    public function transform(Category $category) {
        return [
            'id' => $category->id,
            'name' => $category->name,
        ];
    }

}

测试获取到关联分类的数据: 在这里插入图片描述 这里include字段就是你这命名的小写: 在这里插入图片描述 在这里插入图片描述

2.3 关联用户数据

这边做关联用户数据目的是为了知道这个商品是哪个用户创建的。 在GoodTransformer.php增加: 在这里插入图片描述 在这里插入图片描述 同时在Good.php模型下增加: 在这里插入图片描述 效果: 在这里插入图片描述

2.4 优化列表搜索

    /**
     * 商品列表
     */
    public function index(Request $request)
    {
        $title = $request->query('title'); // 传了商品名称的情况
        $category_id = $request->query('category_id'); // 传了商品id
        $is_on = $request->query('is_on', false); // 是否上架的状态 上架、下架。 不传的时候给默认值false 
        $is_recommend = $request->query('is_recommend', false); // 是否推荐的状态 推荐、不推荐。  不传的时候给默认值false
        $goods = Good::when($title, function ($query) use ($title) {
            $query->where('title', 'like', "%$title%"); // 双引号写变量,%模糊搜索
        })
        ->when($category_id, function ($query) use ($category_id) {
            $query->where('title',  $category_id); // id的话直接等于
        })
        ->when($is_on !== false, function ($query) use ($is_on) {
            $query->where('is_on',  $is_on);
        })
        ->when($is_recommend !== false, function ($query) use ($is_recommend) {
            $query->where('is_recommend',  $is_recommend);
        })
        ->paginate(2);

        return $this->response->paginator($goods, new GoodTransformer());
    }

解释都写到代码里去了。

2.5 测试效果

在这里插入图片描述

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