Các công việc cần triển khai:
- 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.
- 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.
- Khai báo các column tương ứng của các table vào trong các file Model tương ứng.
- Khai báo mối quan hệ giữa các table vào trong Model (nếu có).
- Viết code để định nghĩa các column cần tạo dữ liệu fake trong các file Factory đã tạo.
- Viết lệnh để tạo ra các file seeder cần sử dụng.
- Chạy lệnh để thực thi các file Seeder đã tạo và đã khai báo vào trong file DatabaseSeeder.php
- 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
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 CommentScreenshot về các model đã được tạo ra ở bên dưới.
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:
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.
Screenshot:
Screenshot
Link tham khảo: https://laravel.com/docs/8.x/eloquent-relationships#one-to-many
/**
* Get the comments for the user.
*/
publicfunctioncomments()
{
return$this->hasMany(Comment::class);
}
4.2. Khai báo mối quan hệ cho model Admin
Screenshot:
Screenshot
Link tham khảo: https://laravel.com/docs/8.x/eloquent-relationships#one-to-many
- 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);
}
4.3. Khai báo mối quan hệ cho model Category
Screenshot:
Screenshot
Link tham khảo:
- 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);
}
- 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
Screenshot:
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
Screenshot:
Link tham khảo:
- 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.
Screenshot
- 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
Screenshot:
Link tham khảo:
- 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
- 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
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
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
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
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
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
Screenshot
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
Khai báo AdminSeeder vào trong file DatabaseSeeder.php.
6.2. Viết code xử lý cho CategorySeeder
Screenshot
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
8. Kết quả trong MySQL.
Một bình luận trong “Tạo Seeder”
Very interesting subject, regards for posting.Raise your business