76 lines
2.2 KiB
PHP
76 lines
2.2 KiB
PHP
<?php
|
|||
|
|
|
||
|
|
namespace Database\Seeders;
|
||
|
|
|
||
|
|
use App\Models\Category;
|
||
|
|
use App\Models\Page;
|
||
|
|
use App\Models\Post;
|
||
|
|
use App\Models\Tag;
|
||
|
|
use App\Models\Tool;
|
||
|
|
use App\Models\User;
|
||
|
|
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
|
||
|
|
use Illuminate\Database\Seeder;
|
||
|
|
|
||
|
|
class DatabaseSeeder extends Seeder
|
||
|
|
{
|
||
|
|
use WithoutModelEvents;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Seed the application's database.
|
||
|
|
*/
|
||
|
|
public function run(): void
|
||
|
|
{
|
||
|
|
$author = User::factory()->create([
|
||
|
|
'name' => 'Test User',
|
||
|
|
'email' => 'test@example.com',
|
||
|
|
]);
|
||
|
|
|
||
|
|
$tags = Tag::factory(8)->create();
|
||
|
|
|
||
|
|
$topLevel = Category::factory(3)->create();
|
||
|
|
|
||
|
|
$topLevel->each(function (Category $category) {
|
||
|
|
Category::factory(2)->childOf($category)->create();
|
||
|
|
});
|
||
|
|
|
||
|
|
$allCategories = Category::all();
|
||
|
|
|
||
|
|
Post::factory(20)
|
||
|
|
->recycle($author)
|
||
|
|
->state(fn () => ['category_id' => $allCategories->random()->id])
|
||
|
|
->create()
|
||
|
|
->each(fn (Post $post) => $post->tags()->attach($tags->random(rand(1, 3))->pluck('id')));
|
||
|
|
|
||
|
|
Post::factory(3)
|
||
|
|
->draft()
|
||
|
|
->recycle($author)
|
||
|
|
->state(fn () => ['category_id' => $allCategories->random()->id])
|
||
|
|
->create();
|
||
|
|
|
||
|
|
Tool::factory(4)->featured()->recycle($author)->create();
|
||
|
|
Tool::factory(20)->recycle($author)->create();
|
||
|
|
Tool::factory(3)->pending()->recycle($author)->create();
|
||
|
|
|
||
|
|
Page::factory()->create([
|
||
|
|
'title' => 'About',
|
||
|
|
'slug' => 'about',
|
||
|
|
'body' => "We're a small team writing about AI tools, workflows, and everything in between.",
|
||
|
|
'order' => 1,
|
||
|
|
]);
|
||
|
|
|
||
|
|
Page::factory()->create([
|
||
|
|
'title' => 'Contact',
|
||
|
|
'slug' => 'contact',
|
||
|
|
'body' => 'Questions or feedback? Reach us at [hello@example.com](mailto:hello@example.com).',
|
||
|
|
'order' => 2,
|
||
|
|
]);
|
||
|
|
|
||
|
|
Page::factory()->create([
|
||
|
|
'title' => 'Privacy Policy',
|
||
|
|
'slug' => 'privacy-policy',
|
||
|
|
'body' => 'We respect your privacy and only collect the minimum data needed to run this site.',
|
||
|
|
'order' => 3,
|
||
|
|
]);
|
||
|
|
}
|
||
|
|
}
|