Skip to content

Commit

Permalink
feat: 10. Factory & Faker
Browse files Browse the repository at this point in the history
  • Loading branch information
mfl4 committed Dec 1, 2023
1 parent ead006d commit e9e7d64
Show file tree
Hide file tree
Showing 10 changed files with 124 additions and 83 deletions.
3 changes: 2 additions & 1 deletion app/Http/Controllers/PostController.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ public function index()
{
return view('posts', [
"title" => "Blog",
"posts" => Post::all(),
// "posts" => Post::all(),
"posts" => Post::latest()->get(),
]);
}

Expand Down
4 changes: 2 additions & 2 deletions app/Models/Post.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ public function category()
return $this->belongsTo(Category::class);
}

public function user()
public function author()
{
return $this->belongsTo(User::class);
return $this->belongsTo(User::class, 'user_id');
}
}
26 changes: 13 additions & 13 deletions config/app.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
| framework needs to place the application's name in a notification or
| any other location as required by the application or its packages.
|
*/
*/

'name' => env('APP_NAME', 'Laravel'),

Expand All @@ -27,7 +27,7 @@
| running in. This may determine how you prefer to configure various
| services the application utilizes. Set this in your ".env" file.
|
*/
*/

'env' => env('APP_ENV', 'production'),

Expand All @@ -40,7 +40,7 @@
| stack traces will be shown on every error that occurs within your
| application. If disabled, a simple generic error page is shown.
|
*/
*/

'debug' => (bool) env('APP_DEBUG', false),

Expand All @@ -53,7 +53,7 @@
| the Artisan command line tool. You should set this to the root of
| your application so that it is used when running Artisan tasks.
|
*/
*/

'url' => env('APP_URL', 'http://localhost'),

Expand All @@ -68,7 +68,7 @@
| will be used by the PHP date and date-time functions. We have gone
| ahead and set this to a sensible default for you out of the box.
|
*/
*/

'timezone' => 'UTC',

Expand All @@ -81,7 +81,7 @@
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
*/

'locale' => 'en',

Expand All @@ -94,7 +94,7 @@
| is not available. You may change the value to correspond to any of
| the language folders that are provided through your application.
|
*/
*/

'fallback_locale' => 'en',

Expand All @@ -107,9 +107,9 @@
| data for your database seeds. For example, this will be used to get
| localized telephone numbers, street address information and more.
|
*/
*/

'faker_locale' => 'en_US',
'faker_locale' => env('FAKER_LOCALE', 'en_US'),

/*
|--------------------------------------------------------------------------
Expand All @@ -120,7 +120,7 @@
| to a random, 32 character string, otherwise these encrypted strings
| will not be safe. Please do this before deploying an application!
|
*/
*/

'key' => env('APP_KEY'),

Expand All @@ -137,7 +137,7 @@
|
| Supported drivers: "file", "cache"
|
*/
*/

'maintenance' => [
'driver' => 'file',
Expand All @@ -153,7 +153,7 @@
| request to your application. Feel free to add your own services to
| this array to grant expanded functionality to your applications.
|
*/
*/

'providers' => ServiceProvider::defaultProviders()->merge([
/*
Expand All @@ -179,7 +179,7 @@
| is started. However, feel free to register as many as you wish as
| the aliases are "lazy" loaded so they don't hinder performance.
|
*/
*/

'aliases' => Facade::defaultAliases()->merge([
// 'Example' => App\Facades\Example::class,
Expand Down
28 changes: 28 additions & 0 deletions database/factories/PostFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace Database\Factories;

use Illuminate\Database\Eloquent\Factories\Factory;

/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Post>
*/
class PostFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'title' => fake()->sentence(mt_rand(2, 8)),
'slug' => fake()->slug(),
'excerpt' => fake()->sentence(mt_rand(10, 25)),
'body' => fake()->paragraph(mt_rand(5, 10)),
'user_id' => mt_rand(1, 10),
'category_id' => mt_rand(1, 3),
];
}
}
3 changes: 2 additions & 1 deletion database/factories/UserFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public function definition(): array
{
return [
'name' => fake()->name(),
'username' => fake()->unique()->userName(),
'email' => fake()->unique()->safeEmail(),
'email_verified_at' => now(),
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
Expand All @@ -31,7 +32,7 @@ public function definition(): array
*/
public function unverified(): static
{
return $this->state(fn (array $attributes) => [
return $this->state(fn(array $attributes) => [
'email_verified_at' => null,
]);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public function up(): void
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('username')->unique();
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
Expand Down
126 changes: 64 additions & 62 deletions database/seeders/DatabaseSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,30 +16,30 @@ class DatabaseSeeder extends Seeder
*/
public function run(): void
{
// \App\Models\User::factory(10)->create();

// \App\Models\User::factory()->create([
// User::factory()->create([
// 'name' => 'Test User',
// 'email' => '[email protected]',
// ]);\

User::create([
'name' => 'John Doe',
'email' => '[email protected]',
'password' => bcrypt('password'),
]);
// User::create([
// 'name' => 'John Doe',
// 'email' => '[email protected]',
// 'password' => bcrypt('password'),
// ]);

User::create([
'name' => 'Jack Doe',
'email' => '[email protected]',
'password' => bcrypt('password'),
]);
// User::create([
// 'name' => 'Jack Doe',
// 'email' => '[email protected]',
// 'password' => bcrypt('password'),
// ]);

User::create([
'name' => 'Jane Doe',
'email' => '[email protected]',
'password' => bcrypt('password'),
]);
// User::create([
// 'name' => 'Jane Doe',
// 'email' => '[email protected]',
// 'password' => bcrypt('password'),
// ]);

User::factory(10)->create();

Category::create([
'name' => 'Personal',
Expand All @@ -56,49 +56,51 @@ public function run(): void
'slug' => 'design',
]);

Post::create([
'title' => 'First Post',
'slug' => 'first-post',
'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.',
'category_id' => 1,
'user_id' => 3,
]);

Post::create([
'title' => 'Second Post',
'slug' => 'second-post',
'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.',
'category_id' => 2,
'user_id' => 2,
]);

Post::create([
'title' => 'Third Post',
'slug' => 'third-post',
'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.',
'category_id' => 3,
'user_id' => 1,
]);

Post::create([
'title' => 'Fourth Post',
'slug' => 'fourth-post',
'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.',
'category_id' => 3,
'user_id' => 3,
]);

Post::create([
'title' => 'Fifth Post',
'slug' => 'fifth-post',
'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.',
'category_id' => 1,
'user_id' => 1,
]);
Post::factory(20)->create();

// Post::create([
// 'title' => 'First Post',
// 'slug' => 'first-post',
// 'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
// 'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.',
// 'category_id' => 1,
// 'user_id' => 3,
// ]);

// Post::create([
// 'title' => 'Second Post',
// 'slug' => 'second-post',
// 'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
// 'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.',
// 'category_id' => 2,
// 'user_id' => 2,
// ]);

// Post::create([
// 'title' => 'Third Post',
// 'slug' => 'third-post',
// 'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
// 'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.',
// 'category_id' => 3,
// 'user_id' => 1,
// ]);

// Post::create([
// 'title' => 'Fourth Post',
// 'slug' => 'fourth-post',
// 'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
// 'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.',
// 'category_id' => 3,
// 'user_id' => 3,
// ]);

// Post::create([
// 'title' => 'Fifth Post',
// 'slug' => 'fifth-post',
// 'excerpt' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.',
// 'body' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sagittis purus sit amet volutpat. Fermentum posuere urna nec tincidunt praesent semper feugiat nibh. Dictum varius duis at consectetur. Enim ut tellus elementum sagittis vitae et leo duis. Purus in massa tempor nec. Venenatis cras sed felis eget velit aliquet sagittis id consectetur. Placerat vestibulum lectus mauris ultrices eros in cursus turpis massa. Enim sed faucibus turpis in eu mi. Blandit aliquam etiam erat velit scelerisque.',
// 'category_id' => 1,
// 'user_id' => 1,
// ]);
}
}
2 changes: 1 addition & 1 deletion resources/views/post.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
@section('container')
<h1 class="mb-5">{{ $post->title }}</h1>

<p>By <a href="#" class="text-decoration-none">{{ $post->user->name }}</a> in <a
<p>By <a href="/authors/{{ $post->author->username }}" class="text-decoration-none">{{ $post->author->name }}</a> in <a
href="/categories/{{ $post->category->slug }}" class="text-decoration-none">{{ $post->category->name }}</a></p>

{!! $post->body !!}
Expand Down
6 changes: 3 additions & 3 deletions resources/views/posts.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
@foreach ($posts as $post)
<article class="mb-5 border-bottom pb-4">
<h2><a href="/posts/{{ $post->slug }}" class="text-decoration-none">{{ $post->title }}</a></h2>
<p>By. <a href="#" class="text-decoration-none">{{ $post->user->name }}</a> in <a
href="/categories/{{ $post->category->slug }}"
class="text-decoration-none">{{ $post->category->name }}</a>
<p>By. <a href="/authors/{{ $post->author->username }}" class="text-decoration-none">{{ $post->author->name }}</a>
in
<a href="/categories/{{ $post->category->slug }}" class="text-decoration-none">{{ $post->category->name }}</a>
</p>
<p>{{ $post->excerpt }}</p>
<a href="/posts/{{ $post->slug }}" class="text-decoration-none">Read More...</a>
Expand Down
8 changes: 8 additions & 0 deletions routes/web.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

use App\Http\Controllers\PostController;
use App\Models\Category;
use App\Models\User;
use Illuminate\Support\Facades\Route;

/*
Expand Down Expand Up @@ -48,3 +49,10 @@
'categories' => Category::all(),
]);
});

Route::get('/authors/{author:username}', function (User $author) {
return view('Posts', [
'title' => "User's Posts",
'posts' => $author->posts,
]);
});

0 comments on commit e9e7d64

Please sign in to comment.