Chuyên mục
Xây dựng website tin tức với Laravel 8

Tạo Seeder

Các công việc cần triển khai:

  1. Viết lệnh để tạo ra các file Factory tương ứng với các table đã định nghĩa trong các file migration.
  2. Viết lệnh để tạo ra các file Model tương ứng với các table đã định nghĩa trong các file migration.
  3. Khai báo các column tương ứng của các table vào trong các file Model tương ứng.
  4. Khai báo mối quan hệ giữa các table vào trong Model (nếu có).
  5. Viết code để định nghĩa các column cần tạo dữ liệu fake trong các file Factory đã tạo.
  6. Viết lệnh để tạo ra các file seeder cần sử dụng.
  7. Chạy lệnh để thực thi các file Seeder đã tạo và đã khai báo vào trong file DatabaseSeeder.php
  8. Kết quả trong MySQL.
1. Viết lệnh để tạo ra các file Factory tương ứng với các table đã định nghĩa trong các file migration.
php artisan make:factory AdminFactory php artisan make:factory CategoryFactory php artisan make:factory ArticleFactory php artisan make:factory TagFactory
[Laravel8][Blog_Demo] Factory Diagram
2. Viết lệnh để tạo ra các file Model tương ứng với các table đã định nghĩa trong các file migration.
php artisan make:model Admin php artisan make:model Category php artisan make:model Article php artisan make:model Tag php artisan make:model Comment
[Laravel8][Blog_Demo] Factory Diagram-command generate model Screenshot về các model đã được tạo ra ở bên dưới. [Laravel8][Blog_Demo] Factory Diagram-Model User [Laravel8][Blog_Demo] Factory Diagram-Model Admin [Laravel8][Blog_Demo] Factory Diagram-Model Category [Laravel8][Blog_Demo] Factory Diagram-Model Article [Laravel8][Blog_Demo] Factory Diagram-Model Comment [Laravel8][Blog_Demo] Factory Diagram-Model Tag
3. Khai báo các column tương ứng của các table vào trong các file Model tương ứng.     Screenshot: [Laravel8][Blog_Demo] Factory Diagram-Fillable for model User [Laravel8][Blog_Demo] Factory Diagram-Fillable for model Admin [Laravel8][Blog_Demo] Factory Diagram-Fillable for model Category [Laravel8][Blog_Demo] Factory Diagram-Fillable for model Article [Laravel8][Blog_Demo] Factory Diagram-Fillable for model Comment   [Laravel8][Blog_Demo] Factory Diagram-Fillable for model Tag

4. Khai báo mối quan hệ giữa các table vào trong Model (nếu có).

4.1. Khai báo mối quan hệ cho model User Viết đoạn code để khai báo mối quan hệ giữa table users hasMany với table comments.  
/**
* Get the comments for the user.
*/
publicfunctioncomments()
{
       return$this->hasMany(Comment::class);
}
Screenshot: [Laravel8] Blog Diagram-relationship of table users   Screenshot [Laravel8] Blog Diagram-screenshot for model User Link tham khảo: https://laravel.com/docs/8.x/eloquent-relationships#one-to-many
4.2. Khai báo mối quan hệ cho model Admin
  • Viết đoạn code để khai báo mối quan hệ giữa table admins hasMany với table categories.
  • Viết đoạn code để khai báo mối quan hệ giữa table admins hasMany với table articles.
  • Viết đoạn code để khai báo mối quan hệ giữa table admins hasMany với table tags.
 
/** * Get the categories for the admin. */ public function categories() { return $this->hasMany(Category::class); } /** * Get the articles for the admin. */ public function articles() { return $this->hasMany(Article::class); } /** * Get the tags for the admin. */ public function tags() { return $this->hasMany(Tag::class); }
Screenshot: [Laravel8] Blog Diagram-relationship of table admins   Screenshot [Laravel8] Blog Diagram-screenshot for model Admin   Link tham khảo: https://laravel.com/docs/8.x/eloquent-relationships#one-to-many
4.3. Khai báo mối quan hệ cho model Category
  • Viết đoạn code để khai báo mối quan hệ giữa table categories hasMany với table articles.
  • Viết đoạn code để khai báo mối quan hệ giữa table categories belongsTo với table admins.
/**
* Get the articles for the category.
*/
publicfunctionarticles()
{
return$this->hasMany(Article::class);
}
/**
* Get the admin that owns the category.
*/
publicfunctionadmin()
{
return$this->belongsTo(Admin::class);
}
 
Screenshot:   [Laravel8] Blog Diagram-relationship of table categories Screenshot [Laravel8] Blog Diagram-screenshot for model Category   Link tham khảo:
  • https://laravel.com/docs/8.x/eloquent-relationships#one-to-many
  • https://laravel.com/docs/8.x/eloquent-relationships#one-to-one-defining-the-inverse-of-the-relationship

4.4. Khai báo mối quan hệ cho model Article

  • Viết đoạn code để khai báo mối quan hệ giữa table articles belongsTo với table admins.
  • Viết đoạn code để khai báo mối quan hệ giữa table articles belongsTo với table categories.
  • Viết đoạn code để khai báo mối quan hệ giữa table articles hasMany với table comments.
  • Viết đoạn code để khai báo mối quan hệ giữa table articles belongsToMany với table tags.

 

Screenshot

[Laravel8] Blog Diagram-relationshion of table articles

Screenshot:

[Laravel8] Blog Diagram-screenshot for model Article

 

Link tham khảo:

  • https://laravel.com/docs/8.x/eloquent-relationships#one-to-many
  • https://laravel.com/docs/8.x/eloquent-relationships#one-to-one-defining-the-inverse-of-the-relationship
  • https://laravel.com/docs/8.x/eloquent-relationships#many-to-many-model-structure
4.5. Khai báo mối quan hệ cho model Comment
  • Viết đoạn code để khai báo mối quan hệ giữa table comments belongsTo với table users.
  • Viết đoạn code để khai báo mối quan hệ giữa table comments belongsTo với table articles.
/** * Get the user that owns the comment. */ public function user() { return $this->belongsTo(User::class); } /** * Get the article that owns the comment. */ public function article() { return $this->belongsTo(Article::class); }
Screenshot  
[Laravel8] Blog Diagram-relationshion of table comments Screenshot: [Laravel8] Blog Diagram-screenshot for model Comment Link tham khảo:
  • https://laravel.com/docs/8.x/eloquent-relationships#one-to-many
  • https://laravel.com/docs/8.x/eloquent-relationships#one-to-one-defining-the-inverse-of-the-relationship
  • https://laravel.com/docs/8.x/eloquent-relationships#many-to-many-model-structure
4.6. Khai báo mối quan hệ cho model Tag
  • Viết đoạn code để khai báo mối quan hệ giữa table tags belongsTo với table admins.
  • Viết đoạn code để khai báo mối quan hệ giữa table tags belongsToMany với table articles.
/**
* Get the admin that owns the tag.
*/
public function admin()
{
     return$this->belongsTo(Admin::class);
}
/**
* The articles that belong to the tag.
*/
public function articles()
{
     return$this->belongsToMany(Article::class);
}
Screenshot [Laravel8] Blog Diagram-relationshion of table tags
  Screenshot:   [Laravel8] Blog Diagram-screenshot for model Tag Link tham khảo:
  • https://laravel.com/docs/8.x/eloquent-relationships#one-to-many
  • https://laravel.com/docs/8.x/eloquent-relationships#one-to-one-defining-the-inverse-of-the-relationship
  • https://laravel.com/docs/8.x/eloquent-relationships#many-to-many-model-structure

5. Viết code để định nghĩa các column cần tạo dữ liệu fake trong các file Factory đã tạo.

5.1. Khai báo column cho UserFactory

use Illuminate\Support\Str;
….
 
/**
* Define the model’s default state.
*
* @return array
*/
publicfunctiondefinition()
{
return [
‘name’=>$this->faker->name(),
’email’=>$this->faker->unique()->safeEmail(),
’email_verified_at’=>now(),
‘password’=>bcrypt(‘password’), // password
‘remember_token’=>Str::random(10),
];
}
/**
* Indicate that the model’s email address should be unverified.
*
* @return \Illuminate\Database\Eloquent\Factories\Factory
*/
publicfunctionunverified()
{
return$this->state(function (array $attributes) {
return [
’email_verified_at’=>null,
];
});
}
 
Screenshot
[Laravel8][Blog_Demo] Factory Diagram-Define Column for factory UserFactory
5.2. Khai báo column cho AdminFactory
/**
* Define the model’s default state.
*
* @return array
*/
publicfunctiondefinition()
{
return [
‘name’=>$this->faker->name(),
’email’=>$this->faker->unique()->safeEmail(),
‘password’=>bcrypt(‘password’), // password
];
}
Screenshot[Laravel8][Blog_Demo] Factory Diagram-Define Column for factory AdminFactory

5.3. Khai báo column cho CategoryFactory

use App\Models\Admin;
 
/**
* Define the model’s default state.
*
* @return array
*/
publicfunctiondefinition()
{
return [
‘creator_id’=>Admin::factory(),
‘name’=>$this->faker->name(),
];
}
 
Screenshot
[Laravel8][Blog_Demo] Factory Diagram-Define Column for factory CategoryFactory
 
5.4. Khai báo column cho ArticleFactory
use App\Models\Admin;
use App\Models\Category;
$images = [
‘https://via.placeholder.com/350×250’,
‘https://via.placeholder.com/450×350’,
‘https://via.placeholder.com/550×450’,
‘https://via.placeholder.com/650×550’,
‘https://via.placeholder.com/750×650’,
‘https://via.placeholder.com/850×750’,
];
return [
‘category_id’=>Category::factory(),
‘creator_id’=>Admin::factory(),
‘name’=>$this->faker->title(),
‘content’=>$this->faker->realText(),
‘status’=>1,
‘thumbnail’=>’https://via.placeholder.com/350×250’,
‘images’=>json_encode($images),
];
Screenshot
[Laravel8][Blog_Demo] Factory Diagram-Define Column for factory ArticleFactory

5.5. Khai báo column cho TagFactory

 
use App\Models\Admin;
 
 
* Define the model’s default state.
*
* @return array
*/
publicfunctiondefinition()
{
return [
‘creator_id’=>Admin::factory(),
‘name’=>$this->faker->name(),
];
}
 
 
 
 
Screenshot
[Laravel8][Blog_Demo] Factory Diagram-Define Column for factory TagFactory
 

6. Viết lệnh để tạo ra các file seeder cần sử dụng.

Tạo ra các file Seeder bằng cách sử dụng command line để gõ các lệnh bên dưới:

php artisan make:seeder AdminSeeder
php artisan make:seeder CategorySeeder

 

[Laravel8][Blog_Demo] Factory Diagram-command to generate seeder

[Laravel8][Blog_Demo] Factory Diagram-screenshot seeder

 

Screenshot

[Laravel8][Blog_Demo] Factory Diagram-screenshot AdminSeeder

[Laravel8][Blog_Demo] Factory Diagram-screenshot CategorySeeder

6.1. Viết code xử lý cho AdminSeeder
use App\Models\Admin;
// Create an account for Admin side // https://example.com/admin/login $myAccount = [ ’email’ => ‘admin@gmail.com’, ‘password’ => bcrypt(‘abcd1234’), ];Admin::factory() ->state($myAccount) ->create();
Screenshot
[Laravel8][Blog_Demo] Factory Diagram-screenshot process for AdminSeeder
Khai báo AdminSeeder vào trong file DatabaseSeeder.php.
[Laravel8][Blog_Demo] Factory Diagram-screenshot declare into file DatabaseSeeder 1
6.2. Viết code xử lý cho CategorySeeder
[Laravel8][Blog_Demo] Factory Diagram-screenshot process for CategorySeeder
Screenshot
[Laravel8][Blog_Demo] Factory Diagram-screenshot declare into file DatabaseSeeder 2
Khai báo CategorySeeder vào trong file DatabaseSeeder.php.
7. Chạy lệnh để thực thi các file Seeder đã tạo và đã khai báo vào trong file DatabaseSeeder.php Các bạn gõ lệnh bên dưới: php artisan db:seed Ngoài ra, nếu bạn muốn chạy từng file Seeder riêng lẻ thì có thử sử dụng lệnh ở bên dưới: php artisan db:seed –class=CategorySeeder   Screenshot [Laravel8][Blog_Demo] Factory Diagram-sreeenshot run seeder final    
8. Kết quả trong MySQL. [Laravel8][Blog_Demo] Factory Diagram-screenshot db table admins [Laravel8][Blog_Demo] Factory Diagram-screenshot db table article_tag [Laravel8][Blog_Demo] Factory Diagram-screenshot db table articles [Laravel8][Blog_Demo] Factory Diagram-screenshot db table categories [Laravel8][Blog_Demo] Factory Diagram-screenshot db table tags [Laravel8][Blog_Demo] Factory Diagram-screenshot db table users

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *