Learning by Project I - Development Modul I

featured-image

Membuat Project Laravel

Kedepan kita akan banyak menggunakan terminal untuk mengeksekusi perintah-perintah php, composer dll. Ada 3 terminal yang dapat kita gunakan, yaitu : 

  1. Terminal bawaan windows (Terminal, Command Prompt)
  2. Terminal Laragon
  3. Terminal Visual Studio Code

Sebelum memulai pembuatan project, buka aplikasi laragon kemudian klik tombol 'Start All' untuk menjalankan web server Apache dan database server MySQL. Step ini berlaku disetiap kita akan memulai pengerjaan / Coding kedepannya. Setelah itu buka terminal laragon pastikan bahwa posisi kursor atau direktori di terminal ada di c:\laragon\www. Kemudian ketikkan perintah :

composer create-project laravel/laravel project-pertama-ku

Disaat perintah diatas dijalankan maka komputer kita akan membuat project laravel dan mendownload file-file yang dibutuhkan dan akan mengumpulkan ke dalam satu folder project kita di c:\laragon\www\project-pertama-ku. Tunggu hingga proses download dan eksekusi perintah selesai dijalankan semua. Biasanya terminal akan seperti berikut: 

Installasi Project Laravel Berhasil
Kemudian dalam terminal tersebut kita berpindah ke direktori project kita dengan mengetikkan perintah : 

cd project-pertama-ku

image.png 50.16 KB
Kemudian untuk mengkatifkan website kita dengan mengetikkan perintah : 

php artisan serve

Aktifkan project website di server
Buka browser (chrome atau sejenisnya) dan masukkan alamat : localhost:8000 maka akan muncul seperti tampilan berikut:
Tampilan awal project laravel
Jika sudah tampil seperti diatas maka kita sudah berhasil membuat project website menggunakan laravel. Harap diingat bahwa terminal tadi tidak boleh ditutup karena jika ditutup maka website kita tidak akan berjalan lagi di server. 

Pada modul pertama ini kita akan berfokus pada pembuatan aplikasi backend. Kita akan bekerja sesuai dengan konsep MVC (Model, View, Controller) yang sudah dijelaskan sebelumnya. Acuan kita adalah rancangan yang ada pada ERD dan DFD yang telah kita siapkan sebelumnya. Sebelum kita mulai bekerja dengan konsep MVC, maka silahkan buka project kita di Visual Studio Code. Buka Visual Studio Code, jika ada project yang terbuka maka silahkan ditutup terlebih dahulu, kemudian pada VS Code silahkan pilih Open Folder dan arahkan ke project kita tadi yang ada di c:\laragon\www\project-pertamaku.

Model & Migration

Langkah pertama dalam konsep MVC di laravel kita akan membuat model terlebih dahulu. Model ini kita ambil dan sesuaikan dengan tabel-tabel yang ada di erd atau perancangan database kita sebelumnya. Kemudian pada laravel ada yang namanya migration, yaitu file php yang ketika dieksekusi akan menjalankan perintah ke database untuk membuat tabel, mengubah dan menghapusnya tanpa harus kita masuk ke databasenya secara langsung.

Mari kita analisa dan kita urutkan Model-model yang ada dalam project kita, yaitu :

  1. User
  2. Mahasiswa
  3. Kategori Blog
  4. Kategori Event
  5. Kategori Karya Ilmiah
  6. Tag
  7. Organisasi
  8. Sambutan
  9. Partner
  10. Periode
  11. Kepengurusan
  12. Blog
  13. Blog Tag
  14. Blog Dilihat per Tanggal
  15. Event
  16. Karya Ilmiah

Setelah kita memastikan bahwa model diatas sudah sesuai dan tidak ada perubahan lagi, maka kita buat model dan migration pada project laravel kita. Silahkan buka terminal pada VS Code kita dengan menekan di keyboard tombol Ctrl+` atau dengan klik menu diatas yang bernama Terminal->New Terminal jika berhasil akan seperti gambar dibawah ini :

Terminal di VS Code
Perintah untuk membuat model dan migration :

php artisan make:model Mahasiswa -m

Biasanya model user itu sudah ada dibuatkan oleh laravel pada saat diawal kita membuat project. Jadi untuk proses pembuatan model User kita abaikan. Diatas kita memiliki 16 model, model user diabaikan maka tersisa 15 model. Jalankan perintah diatas sebanyak jumlah model kita dan sesuaikan nama-nama model dengan ketentuan hapus spasi jika memiliki 2 kata lebih dalam nama modelnya. Misalnya untuk model Kategori blog, maka silahkan ketikkan perintah berikut untuk membuat modelnya :

php artisan make:model KategoriBlog -m

-m pada akhir perintah diatas adalah perintah untuk membuat file migration. Berikut bentuk tampilan terminal VS Code setelah menjalankan perintah diatas : 

Perintah buat model dan migration
Silahkan lanjut membuat model tersisa hingga sampai pada model terakhir kita yaitu Karya Ilmiah. Jika semua model diatas sudah anda buat dengan perintah tersebut, silahkan di cek direktori atau folder di project kita apakah sudah ada file model dan migration yang kita buat. File model ada pada direktori app\Models dan migration ada di database\migrations. 

Setting file .env

Silahkan cari nama file .env pada project anda.

Lokasi file .env
Ganti beberapa isi file .env menjadi berikut :

APP_NAME="Applikasi Backend Pertamaku"

APP_URL=http://localhost:8000

APP_LOCALE=id
APP_FALLBACK_LOCALE=id
APP_FAKER_LOCALE=id_ID

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=project_pertama_ku
DB_USERNAME=root
DB_PASSWORD=

Sisanya biarkan saja seperti bawaan awalnya, jangan dihapus. Jangan lupa disimpan setelah diubah menjadi seperti diatas.

Membuat Database (Tabel dan Relasinya) Menggunakan Fitur Migration yang Ada pada Laravel.

Sebelumnya kita sudah membuat model, dalam perintah pembuatan model ada juga perintah untuk membuat file migration. Dalam project ini setiap model merupakan representasi tabel yang ada di database. Sebelum file migration kita jalankan untuk membuat database, kita perlu menentukan isi tabel berupa kolom, tipe data dan relasinya pada file migration. Silahkan buka dan ubah isi dari file-file migration sebagai berikut : (lokasi file ada di : database\migrations\)

1. File migration User

Nama file : ..._create_users_table.php

Berikut tampilan pada VSCode :

File migration User
Cari coding berikut :

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });

Ubah menjadi :

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->enum('is_admin',['Ya','Tidak'])->default('Tidak');
            $table->enum('is_pengurus',['Ya','Tidak'])->default('Tidak');
            $table->string('avatar_url')->nullable();
            $table->rememberToken();
            $table->timestamps();
        });

2. File migration Mahasiswa

Nama file : ..._create_mahasiswas_table.php

Cari coding berikut :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('mahasiswas', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

Ubah menjadi :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('mahasiswas', function (Blueprint $table) {
            $table->id();
            $table->string('nim')->unique();
            $table->string('nama');
            $table->string('slug');
            $table->enum('jenis_kelamin',['Laki-laki','Perempuan'])->default('Laki-laki');
            $table->year('angkatan');
            $table->mediumText('profil')->nullable();
            $table->string('facebook');
            $table->string('instagram');
            $table->string('twitter');
            $table->string('youtube');
            $table->foreignId('user_id')->constrained('users')->cascadeOnDelete();
            $table->timestamps();
        });
    }

3. File migration Kategori Blog

Nama file : ..._create_kategori_blogs_table.php

Cari coding berikut :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('kategori_blogs', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

Ubah menjadi :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('kategori_blogs', function (Blueprint $table) {
            $table->id();
            $table->string('nama');
            $table->string('slug');
            $table->string('keterangan');
            $table->timestamps();
        });
    }

4. File migration Kategori Event

Nama file : ..._create_kategori_events_table.php

Cari coding berikut :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('kategori_events', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

Ubah menjadi :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('kategori_events', function (Blueprint $table) {
            $table->id();
            $table->string('nama');
            $table->string('slug');
            $table->string('keterangan');
            $table->timestamps();
        });
    }

5. File migration Kategori Karya Ilmiah

Nama file : ..._create_kategori_karya_ilmiahs_table.php

Cari coding berikut :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('kategori_karya_ilmiahs', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

Ubah menjadi :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('kategori_karya_ilmiahs', function (Blueprint $table) {
            $table->id();
            $table->string('nama');
            $table->string('slug');
            $table->string('keterangan');
            $table->timestamps();
        });
    }

6. File migration Tag 

Nama file : ..._create_tags_table.php

Cari coding berikut :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('tags', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

Ubah menjadi :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('tags', function (Blueprint $table) {
            $table->id();
            $table->string('nama');
            $table->string('slug');
            $table->string('keterangan');
            $table->timestamps();
        });
    }

7. File migration Organisasi

Nama file : ..._create_organisasis_table.php

Cari coding berikut :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('organisasis', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

Ubah menjadi :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('organisasis', function (Blueprint $table) {
            $table->id(); 
            $table->string('nama');
            $table->string('slug');
            $table->mediumText('profil')->nullable();
            $table->string('visi');
            $table->mediumText('misi')->nullable();
            $table->mediumText('sejarah')->nullable();
            $table->mediumText('filosofi')->nullable();
            $table->mediumText('arti_logo')->nullable();
            $table->string('logo');
            $table->string('gambar_struktur')->nullable();
            $table->enum('status',['Aktif','Non Aktif'])->default('Aktif');
            $table->timestamps();
        });
    }

8. File migration Sambutan

Nama file : ..._create_sambutans_table.php

Cari coding berikut :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('sambutans', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

Ubah menjadi :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('sambutans', function (Blueprint $table) {
            $table->id();             
            $table->string('pemberi_sambutan');
            $table->string('slug');
            $table->mediumText('isi')->nullable();
            $table->string('foto');
            $table->foreignId('organisasi_id')->constrained('organisasis')->cascadeOnDelete();
            $table->timestamps();
        });
    }

9. File migration Partner

Nama file : ..._create_partners_table.php

Cari coding berikut :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('partners', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

Ubah menjadi :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('partners', function (Blueprint $table) {
            $table->id();             
            $table->string('nama');
            $table->string('slug');
            $table->string('logo');
            $table->string('url')->nullable();
            $table->foreignId('organisasi_id')->constrained('organisasis')->cascadeOnDelete();
            $table->timestamps();
        });
    }

10. File migration Periode

Nama file : ..._create_periodes_table.php

Cari coding berikut :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('periodes', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

Ubah menjadi :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('partners', function (Blueprint $table) {
            $table->id();             
            $table->string('sk');
            $table->string('nama');
            $table->string('slug');
            $table->year('tahun1');
            $table->year('tahun2');
            $table->date('tanggal_mulai');
            $table->date('tanggal_selesai');
            $table->enum('status',['Aktif','Non Aktif'])->default('Aktif');
            $table->foreignId('organisasi_id')->constrained('organisasis')->cascadeOnDelete();
            $table->timestamps();
        });
    }

11. File migration Kepengurusan

Nama file : ..._create_kepengurusans_table.php

Cari coding berikut :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('kepengurusans', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

Ubah menjadi :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('kepengurusans', function (Blueprint $table) {
            $table->id();             
            $table->foreignId('organisasi_id')->constrained('organisasis')->cascadeOnDelete();
            $table->foreignId('mahasiswa_id')->constrained('mahasiswas')->cascadeOnDelete();
            $table->string('jabatan');
            $table->string('slug');
            $table->text('detail_jabatan')->nullable();
            $table->tinyInteger('level1')->default(0);
            $table->tinyInteger('level2')->default(0);
            $table->tinyInteger('level3')->default(0);
            $table->timestamps();
        });
    }

12. File migration Blog

Nama file : ..._create_blogs_table.php

Cari coding berikut :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('blogs', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

Ubah menjadi :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('blogs', function (Blueprint $table) {
            $table->id();             
            $table->foreignId('kategori_blog_id')->constrained('kategori_blogs')->cascadeOnDelete();
            $table->foreignId('mahasiswa_id')->constrained('mahasiswas')->cascadeOnDelete();
            $table->string('judul');
            $table->string('slug');
            $table->text('isi_singkat')->nullable();
            $table->mediumText('isi_lengkap')->nullable();
            $table->string('thumbnail')->nullable();
            $table->string('file')->nullable();
            $table->string('youtube_url')->nullable();
            $table->integer('dilihat')->default(0);
            $table->integer('trending')->default(0);
            $table->enum('featured',['Ya','Tidak'])->default('Tidak');
            $table->enum('status',['Draft','Published'])->default('Draft');
            $table->timestamps();
        });
    }

13. File migration Blog Tag

Nama file : ..._create_blog_tags_table.php

Cari coding berikut :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('blog_tags', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

Ubah menjadi :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('blog_tags', function (Blueprint $table) {
            $table->id();             
            $table->foreignId('blog_id')->constrained('blogs')->cascadeOnDelete();
            $table->foreignId('tag_id')->constrained('tags')->cascadeOnDelete();
            $table->timestamps();
        });
    }

14. File migration Blog Dilihat per Tanggal

Nama file : ..._create_blog_dilihat_per_tanggals_table.php

Cari coding berikut :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('blog_dilihat_per_tanggals', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

Ubah menjadi :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('blog_tags', function (Blueprint $table) {
            $table->id();             
            $table->foreignId('blog_id')->constrained('blogs')->cascadeOnDelete();
            $table->date('tanggal');
            $table->integer('dilihat')->default(0);
            $table->timestamps();
        });
    }

15. File migration Event

Nama file : ..._create_events_table.php

Cari coding berikut :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('events', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

Ubah menjadi :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('events', function (Blueprint $table) {
            $table->id();             
            $table->foreignId('kategori_event_id')->constrained('kategori_events')->cascadeOnDelete();
            $table->foreignId('mahasiswa_id')->constrained('mahasiswas')->cascadeOnDelete();
            $table->string('judul');
            $table->string('slug');
            $table->date('tanggal_mulai');
            $table->date('tanggal_selesai');
            $table->text('isi_singkat')->nullable();
            $table->mediumText('isi_lengkap')->nullable();
            $table->string('thumbnail')->nullable();
            $table->string('file')->nullable();
            $table->integer('dilihat')->default(0);
            $table->timestamps();
        });
    }

16. File migration Karya Ilmiah

Nama file : ..._create_karya_ilmiahs_table.php

Cari coding berikut :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('karya_ilmiahs', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

Ubah menjadi :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('karya_ilmiahs', function (Blueprint $table) {
            $table->id();             
            $table->foreignId('kategori_karya_ilmiah_id')->constrained('kategori_karya_ilmiahs')->cascadeOnDelete();
            $table->foreignId('mahasiswa_id')->constrained('mahasiswas')->cascadeOnDelete();
            $table->string('judul');
            $table->string('slug');
            $table->text('isi_singkat')->nullable();
            $table->mediumText('isi_lengkap')->nullable();
            $table->string('thumbnail')->nullable();
            $table->string('file')->nullable();
            $table->integer('dilihat')->default(0);
            $table->timestamps();
        });
    }

Pastikan semua nama kolom, tipe data hingga relasi tabel(foreign key) sudah benar. Harap diperhatikan bahwa bahasa pemrograman php adalah case sensitive, yaitu perbedaan huruf besar dan kecil itu berpengaruh terhadap syntax yang dituliskan, jika salah satu huruf saja maka bisa menyebabkan error pada coding keseluruhan. 

Selanjutnya kita akan eksekusi file-file migrasi yang telah kita buat tadi. Buka kembali terminal di VS Code dengan cara klik menu View-> Terminal kemudian ketikkan perintah berikut :

php artisan migrate

Jika database project kita belum ada di server maka akan muncul peringatan : "Database project_pertama_ku does not exist on mysql connection. would you like to create it? (yes/no)" 

Maka ketikkan yes agar database dibuat dan file migrasi dieksekusi satu persatu untuk membuat table-table.

Jika berhasil akan muncul seperti berikut :

Jalankan perintah migrasi pada project laravel

Silahkan dicek di database mysql kita apakah sudah ada tabel-tabel.

Membuat Relasi Database Pada Model Laravel. 

Pada file migration yang telah kita modifikasi sebelumnya kita akan menemukan coding seperti berikut :

            $table->foreignId('user_id')->constrained('users')->cascadeOnDelete();

Ini menandakan bahwa tabel ini memiliki relasi ke tabel users yang disimpan pada kolom user_id. Pada database kita sudah ada relasi antar tabel, namun untuk project laravel kita, relasi-relasi tersebut harus didefinisikan di model-model kita agar ketika mengambil dan memasukkan data ke database model ini dapat mengenali relasi yang ada sehingga ketika dijalankan query ke database tidak akan mengalami error.

Tidak semua model memiliki relasi, tetapi yang memiliki foreignId atau foreign key saja. Dalam Database relasional kita mengenali relasi dengan istilah berikut (diikuti istilah dalam laravel): 

  • One to One : hasOne
  • One to Many : hasMany
  • Many to One : belongsTo
  • Many to Many : belongsToMany

Silahkan telusuri file migration dan temukan relasi-relasi tersebut. Kemudian kita membuat relasi pada model kita sebagai berikut :

1. Relasi Pada Model Mahasiswa

Tabel mahasiswa di database memilki relasi one to one ke tabel user. Silahkan buka file model mahasiswa yang berada di app\Models\Mahasiswa.php 

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Mahasiswa extends Model
{
    //
}

Modifikasi menjadi :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;

class Mahasiswa extends Model
{
    
    public function user(): HasOne
    {
        return $this->hasOne(User::class);
    }
}

jika kita menemukan pesan error atau coding kita ditandai baris bawah berwarna merah seperti ini :

image.png 22.1 KB
Itu tandanya fungsi tersebut belum didaftarkan di model ini. Maka cara paling mudah daan cepat adalah klik kanan di coding yg error bergaris merah tersebut dan klik Import Class. Lakukan cara tersebut untuk semua baris berwarna merah seperti yang terlihat pada gambar berikut :
image.png 37.82 KB
Maka file akan menambahkan beberapa baris coding dibagian atas seperti terlihat digambar:
image.png 25.15 KB
2. Relasi Pada Model Kategori Blog

Tabel kategori blog di database memilki relasi one to many ke tabel blog. Silahkan buka file model Kategori Blog yang berada di app\Models\KategoriBlog.php 

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class KategoriBlog extends Model
{
    //
}

Modifikasi menjadi :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;

class KategoriBlog extends Model
{
    public function blogs(): HasMany
    {
        return $this->hasMany(Blog::class);
    }
}

3. Relasi Pada Model Kategori Event

Tabel kategori event di database memilki relasi one to many ke tabel event. Silahkan buka file model Kategori Event yang berada di app\Models\KategoriEvent.php 

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class KategoriEvent extends Model
{
    //
}

Modifikasi menjadi :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;

class KategoriBlog extends Model
{
    public function blogs(): HasMany
    {
        return $this->hasMany(Blog::class);
    }
}

4. Relasi Pada Model Kategori Karya ilmiah

Tabel kategori karya ilmiah di database memilki relasi one to many ke tabel event. Silahkan buka file model Kategori Karya ilmiah yang berada di app\Models\KategoriKaryaIlmiah.php 

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class KategoriKaryaIlmiah extends Model
{
    //
}

Modifikasi menjadi :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;

class KategoriKaryaIlmiah extends Model
{
    public function karya_ilmiahs(): HasMany
    {
        return $this->hasMany(KaryaIlmiah::class);
    }
}

5. Relasi Pada Model Tag

Tabel tag di database memilki relasi many to many ke tabel blog. Silahkan buka file model Tag yang berada di app\Models\Tag.php 

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Tag extends Model
{
    //
}

Modifikasi menjadi :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;

class Tag extends Model
{
    public function blogs(): BelongsToMany
    {
        return $this->belongsToMany(Blog::class, 'blog_tags')->withTimestamps();
    }
}

6. Relasi Pada Model Organisasi

Silahkan buka file model Organisasi yang berada di app\Models\Organisasi.php 

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Organisasi extends Model
{
    //
}

Modifikasi menjadi :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;

class Organisasi extends Model
{
    public function sambutans(): HasMany
    {
        return $this->hasMany(Sambutan::class);
    }

    public function partners(): HasMany
    {
        return $this->hasMany(Partner::class);
    }

    public function periodes(): HasMany
    {
        return $this->hasMany(Periode::class);
    }
}

7. Relasi Pada Model Sambutan

Silahkan buka file model Sambutan yang berada di app\Models\Sambutan.php 

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Sambutan extends Model
{
    //
}

Modifikasi menjadi :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Sambutan extends Model
{
    public function organisasi(): BelongsTo
    {
        return $this->belongsTo(Organisasi::class);
    }
}

8. Relasi Pada Model Partner

Silahkan buka file model Partner yang berada di app\Models\Partner.php 

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Partner extends Model
{
    //
}

Modifikasi menjadi :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Pertner extends Model
{
    public function organisasi(): BelongsTo
    {
        return $this->belongsTo(Organisasi::class);
    }
}

9. Relasi Pada Model Periode

Silahkan buka file model Partner yang berada di app\Models\Periode.php 

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Periode extends Model
{
    //
}

Modifikasi menjadi :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Periode extends Model
{
    public function organisasi(): BelongsTo
    {
        return $this->belongsTo(Organisasi::class);
    }
    
    public function mahasiswas(): HasMany
    {
        return $this->hasMany(Mahasiswa::class);
    }
}

10. Relasi Pada Model Blog

Silahkan buka file model Blog yang berada di app\Models\Blog.php 

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Blog extends Model
{
    //
}

Modifikasi menjadi :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;

class Blog extends Model
{
    
    public function mahasiswa(): BelongsTo
    {
        return $this->belongsTo(Mahasiswa::class);
    }
    
    public function kategori_blog(): BelongsTo
    {
        return $this->belongsTo(KategoriBlog::class);
    }
    
    public function blog_dilihat_per_tanggals(): HasMany
    {
        return $this->hasMany(BlogDilihatPerTanggal::class);
    }
    
    public function tags(): BelongsToMany
    {
        return $this->belongsToMany(tag::class, 'blog_tags')->withTimestamps();
    }
}









Modul I telah selesai dan silahkan diulang-ulang kembali, dibaca-baca dan dipahami dengan seksama step by step yang kita lakukan tadi. Pembahasan selanjutnya adalah membuat form-form input data sesuai dengan model yang ada ke dalam database menggunakan Filament.

Terimakasih ...

54 views
8