当前位置: 首页 > news >正文

博客项目 laravel vue mysql 第五章 标签功能

前言

前面章节没看过的朋友请先从第一章开始看 。这章主要写标签相关功能。

后端

创建迁移文件

php artisan make:migration create_tags_table

编辑迁移文件

public function up()
{Schema::create('tags', function (Blueprint $table) {$table->id(); // 主键,自增ID$table->string('name')->unique(); // 标签名称,唯一,如“Laravel”$table->string('slug')->unique(); // 标签别名,URL 友好,如“laravel”$table->timestamps(); // 创建时间和更新时间});
}

运行迁移

php artisan migrate

编辑种子文件database/seeders/DatabaseSeeder.php

// 创建8个标签
use App\Models\Tag;$tags = [Tag::create(['name' => 'Laravel', 'slug' => 'laravel']),Tag::create(['name' => 'Vue.js', 'slug' => 'vue']),Tag::create(['name' => 'PHP', 'slug' => 'php']),Tag::create(['name' => 'JavaScript', 'slug' => 'javascript']),Tag::create(['name' => 'MySQL', 'slug' => 'mysql']),Tag::create(['name' => 'CSS', 'slug' => 'css']),Tag::create(['name' => 'Git', 'slug' => 'git']),Tag::create(['name' => 'Docker', 'slug' => 'docker']),
];

创建模型命令

php artisan make:model Tag

编辑文件

protected $fillable = ['name', 'slug'];

创建控制器命令

php artisan make:controller TagController

编辑控制器

<?php
namespace App\Http\Controllers;use App\Models\Tag;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;class TagController extends Controller
{
/*** 查询所有标签(分页,支持文章计数)** @param Request $request* @return JsonResponse*/public function all(Request $request): JsonResponse{$perPage = $request->input('per_page', 10);$page = $request->input('page', 1);$search = $request->input('search');$query = Tag::withCount('articles')->orderBy('created_at', 'desc');if ($search) {$query->where(function($q) use ($search) {$q->where('name', 'like', "%{$search}%")->orWhere('slug', 'like', "%{$search}%");});}$tags = $query->paginate($perPage, ['id', 'name', 'slug'], 'page', $page);return response()->json(['data' => $tags->items(),'meta' => ['current_page' => $tags->currentPage(),'per_page' => $tags->perPage(),'total' => $tags->total(),'last_page' => $tags->lastPage(),'from' => $tags->firstItem(),'to' => $tags->lastItem(),],'links' => ['first' => $tags->url(1),'last' => $tags->url($tags->lastPage()),'prev' => $tags->previousPageUrl(),'next' => $tags->nextPageUrl(),],'message' => '成功获取标签列表',], 200);}
}

前端

http://www.xdnf.cn/news/1113067.html

相关文章:

  • Docker 搭建本地Harbor私有镜像仓库
  • 音视频学习(三十八):像素与位深
  • python3的可变参数如何传递元组和字典
  • EWSGAN:自动搜索高性能的GAN生成器架构
  • Datawhale 2025 AI夏令营 MCP Server Task2
  • LeetCode题解---<485.最大连续1的个数>
  • AI编程下的需求规格文档的问题及新规范
  • AI图像修复工具CodeFormer实测:马赛克去除与画质增强效果评测
  • day03-链表part1
  • JAX study notes[17]
  • C语言基础教程--从入门到精通
  • AI问答:成为合格产品经理所需能力的综合总结
  • 一文认识并学会c++模板(初阶)
  • [Python] -实用技巧篇1-用一行Python代码搞定日常任务
  • Java 接口与抽象类:深入解析两者的区别及应用场景
  • 基于springboot+Vue的二手物品交易的设计与实现(免费分享)
  • 游戏开发日记7.12
  • 基于无人机 RTK 和 yolov8 的目标定位算法
  • 啤酒自动装箱机构设计cad【10张】+三维图+设计说明书
  • 生成式对抗网络(GAN)模型原理概述
  • 配置驱动开发:初探零代码构建嵌入式软件配置工具
  • comfyUI-controlNet-线稿软边缘
  • AI 基础概念一:芯片类型和软硬件框架
  • 浏览器宏任务的最小延时:揭开setTimeout 4ms的神话
  • 猿人学js逆向比赛第一届第二十题
  • 程序在计算机中如何运行?——写给编程初学者的指南
  • 咨询导览,AI发展趋势
  • C语言中整数编码方式(原码、反码、补码)
  • Gitee Push 失败 7 日谈:每天一个踩坑故事
  • 【InnoDB磁盘结构1】系统表空间,独立表空间,双写缓冲区