博客项目 laravel vue mysql 第四章 分类功能

前言

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

后端

创建迁移文件命令

php 复制代码
php artisan make:migration create_categories_table

编辑database/migrations/2025_07_11_210720_create_categories_table.php

php 复制代码
public function up()
 {
     Schema::create('categories', function (Blueprint $table) {
         $table->id(); // 主键,自增ID
         $table->string('name')->unique(); // 分类名称,唯一,如"技术"
         $table->string('slug')->unique(); // 分类别名,URL 友好,如"tech"
         $table->text('description')->nullable(); // 分类描述,可为空
         $table->timestamps(); // 创建时间和更新时间
     });
 }

执行迁移

php 复制代码
php artisan migrate

创建模型命令

php 复制代码
php artisan make:model Category

编辑模型app/Models/Category.php

php 复制代码
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    use HasFactory;

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

}

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

php 复制代码
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\User;
use App\Models\Category;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call([
            UserSeeder::class
        ]);

        $admin = User::where('name', 'admin')->first();

        // 创建分类
        $categories = [
            Category::create([
                'name' => '技术分享',
                'slug' => 'tech',
                'description' => '分享最新技术、编程经验和开发技巧。',
            ]),
            Category::create([
                'name' => '生活随笔',
                'slug' => 'life',
                'description' => '记录生活点滴、感悟与随想。',
            ]),
            Category::create([
                'name' => '学习笔记',
                'slug' => 'study',
                'description' => '学习过程中的笔记、总结与心得。',
            ]),
        ];
    }
}

这里我执行了

php 复制代码
php artisan migrate:refresh --seed

不知道为啥不起作用。有懂的大佬说一下呗。

我这里直接删了数据库,重新运行迁移和种子文件了。以后加文章之类的应该还是这套操作。笨办法,嘻嘻。

php 复制代码
php artisan migrate
php artisan db:seed

创建控制器命令

php 复制代码
php artisan make:controller CategoryController

编辑app/Http/Controllers/CategoryController.php

php 复制代码
<?php

namespace App\Http\Controllers;

use App\Models\Category;
use Illuminate\Http\Request;

class CategoryController extends Controller
{
    public function index(Request $request) 
    {
        $perPage = $request->input('per_page', 10);
        $search = $request->input('search');
        $query = Category::orderby('create_at', 'desc');
        
        if($search) {
            $query->where('name', 'like', "%{$search}%");
        }

        $categories = $query->paginate($perPage);

        return response()->json([
            'data' =>$categories->items(),
            'pagination' => [
                'total' => $categories->total(),
                'per_page' => $categories->perPage(),
                'current_page' => $categories->currentPage(),
                'last_page' => $categories->lastPage()
            ]
        ], 200);
    }
}

前端

相关推荐
志尊宝2 小时前
Vue3 零基础每日笔记(073):keep-alive 页面缓存实战——列表页返回不丢状态
vue.js·笔记·缓存·#vue #前端 #前端开发·#javascript·#vue.js
闲云野鹤在人间3 小时前
MySQL|从理论、安装、备份到主从复制、MHA高可用详解
linux·运维·数据库·mysql·云计算
要开心吖ZSH5 小时前
MySQL 慢 SQL 排查操作手册-个人笔记版
java·笔记·sql·mysql·慢查询
Gl�ria6 小时前
MySQL 单机版 vs 高可用版:宕机排查 + 故障处理
mysql·adb·架构
Titan20247 小时前
MySQL索引学习笔记
笔记·学习·mysql
ClouGence8 小时前
数据库迁移工具 CloudCanal v6.5.0.0 发布:新增 TDSQL PostgreSQL 多条链路,支持 MongoDB 双向同步
数据库·mysql·mongodb
这个DBA有点耶9 小时前
Change Buffer深入:二级索引写入的隐形加速器与它的代价
数据库·mysql·代码规范
for_ever_love__9 小时前
MySQL 事务隔离级别讲透:MVCC、幻读与四个级别怎么选
java·数据库·mysql·事务·mvcc·不可重复读·幻读
Southern Wind13 小时前
AIAgent——第一章:本地 Agent 与 Vue 3 流式全栈实战
前端·javascript·vue.js
这个DBA有点耶13 小时前
关系数据库管理系统选型指南:四步决策框架与主流产品技术路线对比
数据库·sql·程序人生·mysql·database·dba