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

一、商品添加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的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你华还是你华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值