Dibagian ketiga Membuat Blog dengan Laravel 5.6 dan AdminLTE 3, kita akan :
- Membuat tabel posts dan model Post
- Membuat beberapa dummy data menggunakan database seeder
Sebelumnya, file .env perlu disetting dulu sesuai dengan informasi database yang digunakan di komputer Anda.
1 2 3 4 5 6 |
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_adminlte DB_USERNAME=root DB_PASSWORD=root |
1. Membuat table Posts dan Model Post
Buka terminal kemudian ketik :
1 |
php artisan make:model Post -m |
Perintah ini akan menghasilkan model Post dan file migration untuk tabel post.
Buka folder database/migrations dan modifikasi file yang baru dibuat :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreatePostsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('posts', function (Blueprint $table) { $table->increments('id'); $table->integer('author_id')->unsigned(); $table->foreign('author_id')->references('id')->on('users')->onDelete('restrict'); $table->string('title'); $table->string('slug')->unique(); $table->text('excerpt'); $table->text('body'); $table->string('image')->nullable(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('posts'); } } |
Terdapat kolom author_id sebagai foreign key dari table users untuk menyimpan informasi penulis konten.
Jalankan migrasi :
1 |
php artisan migrate |
Buka database administrator (PhpMyAdmin atau Sequel Pro atau Navicat), tabel posts akan muncul.
2. Membuat Beberapa Dummy Data Menggunakan Database Seeder
Kita bisa saja mengisi tabel secara manual, namun tentu saja akan lama. Kita akan menggunakan bantuan dari laravel seeder dan faker library untuk melakukan hal ini. Kita mulai dengan membuat PostsTableSeeder dan UsersTableSeeder dengan perintah :
1 2 |
php artisan make:seed PostsTableSeeder php artisan make:seed UsersTableSeeder |
UsersTableSeeder.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?php use Illuminate\Database\Seeder; class UsersTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { //reset table DB::statement('SET FOREIGN_KEY_CHECKS=0'); DB::table('users')->truncate(); DB::table('users')->insert([ [ 'name' => "Super Administrator", 'password' => bcrypt('123secret') ], [ 'name' => "Administrator", 'password' => bcrypt('123secret') ], [ 'name' => "Client User", 'password' => bcrypt('123secret') ], ]); } } |
Kita membuat tiga user.
PostsTableSeeder.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
<?php use Illuminate\Database\Seeder; use Faker\Factory; use Carbon\Carbon; class PostsTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { //reset posts table DB::table('posts')->truncate(); //generate 10 dummy posts $image = "http://placehold.it/750x300"; $posts = []; $faker = Factory::create(); $date = Carbon::create(2018, 7, 10, 11); for($i=1; $i<=10; $i++){ $date->addDays(1); $publishedDate = clone($date); $createdDate = clone($date); $posts[] = [ 'author_id' => rand(1,3), 'title' => $faker->sentence(rand(8,12)), 'excerpt' => $faker->text(rand(250,300)), 'body' => $faker->paragraphs(rand(10,15), true), 'slug' => $faker->slug(), 'image' => rand(0,1) == 1 ? $image : null, 'created_at' => $createdDate, 'updated_at' => $createdDate, ]; } DB::table('posts')->insert($posts); } } |
Faker\Factory adalah suatu library yang memudahkan kita membuat dummy data. Faker membuat string seperti kalimat, kata, bahkan termasuk paragraf.
Modifikasi DatabaseSeeder.php, UsersTableSeeder::class harus diletakkan sebelum PostsTableSeeder, kalau tidak akan menyebabkan error.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { $this->call(UsersTableSeeder::class); $this->call(PostsTableSeeder::class); } } |
Langkah selanjutnya adalah menjalankan seedernya dengan perintah :
1 |
php artisan db:seed |
Tabel posts dan users secara otomatis sudah terisi data dummy.