blog/database/seeders/BlogSeeder.php

145 lines
10 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace Database\Seeders;
use App\Models\Category;
use App\Models\Post;
use App\Models\Tag;
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
class BlogSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
// 创建管理员用户
$admin = User::firstOrCreate(
['email' => 'admin@example.com'],
[
'name' => 'Admin',
'password' => Hash::make('password'),
]
);
// 创建分类
$categories = [
['name' => '生活随笔', 'slug' => 'life', 'description' => '记录生活中的点滴感悟', 'sort_order' => 1],
['name' => '旅行日记', 'slug' => 'travel', 'description' => '探索世界的每一个角落', 'sort_order' => 2],
['name' => '美食探店', 'slug' => 'food', 'description' => '寻找城市中的美味', 'sort_order' => 3],
['name' => '穿搭分享', 'slug' => 'fashion', 'description' => '日常穿搭灵感', 'sort_order' => 4],
['name' => '摄影作品', 'slug' => 'photography', 'description' => '用镜头记录美好', 'sort_order' => 5],
['name' => '读书笔记', 'slug' => 'reading', 'description' => '阅读与思考', 'sort_order' => 6],
];
foreach ($categories as $categoryData) {
Category::firstOrCreate(['slug' => $categoryData['slug']], $categoryData);
}
// 创建标签
$tags = [
['name' => '日常', 'slug' => 'daily', 'color' => '#6366f1'],
['name' => '推荐', 'slug' => 'recommend', 'color' => '#ec4899'],
['name' => '种草', 'slug' => 'wishlist', 'color' => '#22c55e'],
['name' => '打卡', 'slug' => 'check-in', 'color' => '#f59e0b'],
['name' => '治愈', 'slug' => 'healing', 'color' => '#14b8a6'],
['name' => '灵感', 'slug' => 'inspiration', 'color' => '#8b5cf6'],
['name' => '极简', 'slug' => 'minimal', 'color' => '#64748b'],
['name' => '氛围感', 'slug' => 'aesthetic', 'color' => '#d946ef'],
['name' => '干货', 'slug' => 'tips', 'color' => '#0ea5e9'],
['name' => '宝藏', 'slug' => 'treasure', 'color' => '#f43f5e'],
];
foreach ($tags as $tagData) {
Tag::firstOrCreate(['slug' => $tagData['slug']], $tagData);
}
$allCategories = Category::all();
$allTags = Tag::all();
// 创建示例文章
$posts = [
[
'title' => '周末的咖啡时光 ☕',
'slug' => 'weekend-coffee-time',
'excerpt' => '在繁忙的生活中,给自己一个慢下来的理由。一杯咖啡,一本书,享受属于自己的周末时光。',
'content' => '<p>周末的早晨,阳光透过窗帘洒进房间,我喜欢这样慵懒地醒来。</p><p>不急不慢地准备一杯手冲咖啡,看着咖啡粉在热水中绽放,香气渐渐弥漫整个房间。这大概就是生活中最简单的幸福吧。</p><h2>关于这家咖啡店</h2><p>最近发现了一家藏在巷子里的小店,装修简约却很有格调。老板是个很有趣的人,每次去都会聊上几句。</p><blockquote><p>「生活不止眼前的苟且,还有诗和远方。」</p></blockquote><p>希望每个人都能找到属于自己的小确幸。</p>',
'is_featured' => true,
],
[
'title' => '探索城市的隐藏角落 🏙️',
'slug' => 'explore-hidden-city',
'excerpt' => '在熟悉的城市中,总有一些角落等待被发现。这次我用一天的时间,探索了几个从未去过的地方。',
'content' => '<p>生活在一个城市久了,总觉得已经把每个角落都走遍了。但其实,只要换一个视角,就能发现很多之前忽略的美好。</p><h2>老城区的午后</h2><p>老城区的街道总有一种特别的气息,斑驳的墙面诉说着岁月的故事。</p><p>偶遇一家开了30年的老店老板娘热情地介绍着店里的招牌。原来最美的风景一直就在身边。</p><h3>推荐路线</h3><ul><li>早上:从老城区的早餐店开始</li><li>中午:漫步胡同,感受生活气息</li><li>下午:找一家安静的咖啡馆坐坐</li></ul>',
'is_featured' => true,
],
[
'title' => '今日穿搭分享 | 极简风 👗',
'slug' => 'outfit-minimal-style',
'excerpt' => '分享一套日常通勤穿搭舒适又不失精致。极简主义的魅力在于less is more。',
'content' => '<p>今天分享一套我最近很喜欢的穿搭,适合日常通勤,也适合周末约会。</p><h2>单品分享</h2><p>上衣选择了一件基础款的白色T恤百搭又显气质。下装是一条高腰阔腿裤拉长腿部线条。</p><p>配饰上我选择了简约的金色项链和耳环,点缀整体造型。</p><blockquote><p>「穿衣服要舒服,更要有自己的风格。」</p></blockquote><h3>搭配tips</h3><ul><li>基础款单品要注重质感</li><li>配色尽量控制在三种以内</li><li>配饰是点睛之笔</li></ul>',
'is_featured' => true,
],
[
'title' => '居家改造计划 | 打造温馨小窝 🏠',
'slug' => 'home-renovation-plan',
'excerpt' => '一直想改造一下自己的房间,终于动手了!分享一些居家改造的心得。',
'content' => '<p>租房多年,一直觉得家只是一个睡觉的地方。但最近开始意识到,家应该是一个让人放松的空间。</p><h2>改造思路</h2><p>首先是整理收纳,把不需要的东西都断舍离。然后添置了一些温馨的装饰品,比如香薰蜡烛、绿植、温暖的灯光。</p><p>改造后的房间真的让人心情好很多!</p><h3>好物推荐</h3><ul><li>无火香薰:提升空间氛围</li><li>暖光台灯:营造温馨感</li><li>收纳盒:保持整洁</li></ul>',
'is_featured' => false,
],
[
'title' => '读书笔记 | 《被讨厌的勇气》📚',
'slug' => 'reading-notes-courage',
'excerpt' => '最近读完了这本书,对阿德勒心理学有了新的认识。分享一些读后感。',
'content' => '<p>这本书用对话的形式,讲述了阿德勒心理学的核心观点。读完后,对很多事情有了新的看法。</p><h2>核心观点</h2><p>书中提到,我们的人生是由自己选择的,不应该被过去所束缚。每个人都有改变的能力。</p><blockquote><p>「人生没有意义,生命的意义是你自己赋予的。」</p></blockquote><h3>读后感</h3><p>读完这本书,最大的收获是学会了「课题分离」。每个人都应该专注于自己的课题,不要过多干涉别人的课题。</p>',
'is_featured' => false,
],
[
'title' => '美食日记 | 自制抹茶提拉米苏 🍰',
'slug' => 'food-matcha-tiramisu',
'excerpt' => '周末尝试做了抹茶提拉米苏,没想到意外的成功!分享食谱和制作过程。',
'content' => '<p>一直很喜欢抹茶口味的甜品,这次尝试自己动手做提拉米苏,效果超出预期!</p><h2>食材准备</h2><p>马斯卡彭芝士、抹茶粉、手指饼干、鲜奶油、蛋黄、糖粉等。</p><h2>制作步骤</h2><p>1. 蛋黄加糖隔水加热打发<br>2. 马斯卡彭芝士打软后混合蛋黄糊<br>3. 手指饼干蘸抹茶液铺底<br>4. 铺上芝士糊,重复几层<br>5. 冷藏4小时以上</p><p>自己做的甜品就是不一样,满满的成就感!</p>',
'is_featured' => false,
],
[
'title' => '春日踏青 | 感受大自然的美好 🌸',
'slug' => 'spring-outing-nature',
'excerpt' => '趁着春光正好,来一场说走就走的踏青之旅。花海、蓝天、微风,一切都刚刚好。',
'content' => '<p>等了一个冬天,终于迎来了春暖花开的季节。约上三五好友,去郊外感受大自然的魅力。</p><h2>目的地</h2><p>这次选择了城郊的一个花海公园,樱花和油菜花开得正盛。</p><p>阳光洒在身上,暖暖的,让人忍不住放慢脚步,好好感受这一刻的美好。</p><blockquote><p>「春天就是要出去走走,感受生命的力量。」</p></blockquote><h3>拍照tips</h3><ul><li>选择早上或傍晚的光线</li><li>穿浅色衣服更出片</li><li>善用前景构图</li></ul>',
'is_featured' => false,
],
[
'title' => '健身打卡 | 坚持的力量 💪',
'slug' => 'fitness-check-in',
'excerpt' => '健身一个月的变化分享。虽然过程很辛苦,但看到自己的进步,一切都值得。',
'content' => '<p>一个月前开始认真健身,从最开始的不适应到现在慢慢形成习惯,收获了很多。</p><h2>我的训练计划</h2><p>每周训练4-5次有氧和力量交替进行。刚开始的时候真的很累但坚持下来后身体素质明显提高了。</p><h3>一些建议</h3><ul><li>制定合理的计划,循序渐进</li><li>饮食要配合,保证蛋白质摄入</li><li>休息同样重要,不要过度训练</li><li>找到自己喜欢的运动方式</li></ul><p>希望这篇分享能给想开始健身的朋友一些动力!</p>',
'is_featured' => false,
],
];
foreach ($posts as $index => $postData) {
$post = Post::firstOrCreate(
['slug' => $postData['slug']],
array_merge($postData, [
'user_id' => $admin->id,
'category_id' => $allCategories->random()->id,
'status' => 'published',
'published_at' => now()->subDays(rand(1, 30)),
'views_count' => rand(100, 3000),
'likes_count' => rand(10, 300),
])
);
// 随机关联2-4个标签
$post->tags()->sync($allTags->random(rand(2, 4))->pluck('id'));
}
$this->command->info('Blog seeder completed successfully!');
$this->command->info('Admin login: admin@example.com / password');
}
}