Untuk menambahkan fitur CRUD Dosen , berikut adalah roadmap step-by-step yang bisa anda ikuti untuk memastikan semuanya berjalan dengan baik, tanpa error:
Langkah pertama adalah membuat model Dosen yang akan berhubungan dengan tabel dosens
dalam database.
Perintah:
php artisan make:model Dosen
Setelah model Dosen
terbentuk, anda perlu menambahkan kolom-kolom yang sesuai dengan struktur data yang diberikan di dalam model.
File: app/Models/Dosen.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Dosen extends Model
{
use HasFactory;
protected $fillable = [
'nidn',
'nip',
'nama_lengkap',
'jenis_kelamin',
'kelompok_keahlian',
'bidang_keilmuan',
'jabatan_fungsional',
'tmt', //Tanggal resmi pengangkatan seseorang menjadi pegawai, termasuk CPNS. TMT menandai awal masa kerja seorang PNS.
'prodi_id',
];
/**
* Relasi dengan tabel `prodies`.
*/
public function prodi()
{
return $this->belongsTo(Prodi::class);
}
}
Langkah selanjutnya adalah membuat migration untuk tabel dosens
.
Perintah:
php artisan make:migration create_dosens_table
Setelah itu, buka file migration yang baru dibuat di database/migrations/
dan sesuaikan dengan struktur data yang diinginkan.
File: database/migrations/xxxx_xx_xx_create_dosens_table.php
:
<?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('dosens', function (Blueprint $table) {
$table->id();
$table->string('nidn')->unique();
$table->string('nip')->unique();
$table->string('nama_lengkap');
$table->boolean('jenis_kelamin')->default(true); // 1 = Laki-laki, 0 = Perempuan
$table->string('kelompok_keahlian');
$table->string('bidang_keilmuan');
$table->string('jabatan_fungsional');
$table->date('tmt');
$table->foreignId('prodi_id')->constrained('prodies');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('dosens');
}
};
Setelah migration selesai, jalankan perintah untuk membuat tabel di database.
Perintah:
php artisan migrate
Sekarang kita buat data seeder untuk tabel dosens
.
Perintah:
php artisan make:seeder DosenSeeder
Kemudian, edit file seeder di database/seeders/DosenSeeder.php
untuk memasukkan data contoh dosen.
File: database/seeders/DosenSeeder.php
:
<?php
namespace Database\Seeders;
use GuzzleHttp\Promise\Create;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class DosenSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
DB::table('dosens')->insert([
[
'nidn' => '123456789',
'nip' => '987654321',
'nama_lengkap' => 'Dr. John Doe',
'jenis_kelamin' => 1,
'kelompok_keahlian' => 'Teknologi Informasi',
'bidang_keilmuan' => 'Pemrograman Komputer',
'jabatan_fungsional'=> 'Dosen',
'tmt' => '2020-08-01',
'prodi_id' => 1,
'created_at' => now()
],
]);
}
}
Sekarang, buat controller untuk menangani operasi CRUD pada Dosen.
Perintah:
php artisan make:controller Api/Admin/DosenController
Kemudian, edit controller tersebut di app/Http/Controllers/Api/Admin/DosenController.php
.
File: app/Http/Controllers/Api/Admin/DosenController.php
:
<?php
namespace App\Http\Controllers\Api\Admin;
use App\Http\Controllers\Controller;
use App\Http\Resources\DosenResource;
use App\Models\Dosen;
use Illuminate\Support\Facades\Validator;
use Illuminate\Http\Request;
class DosenController extends Controller
{
public function index(Request $request)
{
$dosens = Dosen::when($request->q, function ($query) use ($request) {
return $query->where('nama_lengkap', 'like', '%' . $request->q . '%');
})->latest()->paginate(5);
return new DosenResource(true, 'List Data Dosen', $dosens);
}
// UNTUK MENAMBAHKAN DATA DOSEN
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'nidn' => 'required|unique:dosens',
'nip' => 'required|unique:dosens',
'nama_lengkap' => 'required|string|max:100',
'jenis_kelamin' => 'required|boolean',
'kelompok_keahlian' => 'required|string|max:100',
'bidang_keilmuan' => 'required|string|max:100',
'jabatan_fungsional'=> 'required|string|max:50',
'tmt' => 'required|date',
'prodi_id' => 'required|exists:prodies,id',
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
$dosen = Dosen::create($request->all());
if ($dosen) {
return new DosenResource(true, 'Data Dosen Berhasil Disimpan', $dosen);
}
return new DosenResource(false, 'Data Dosen Gagal Disimpan!', null);
}
// UNTUK MENAMPILKAN DATA DOSEN BERDASARKAN ID
public function show(Dosen $dosen)
{
if ($dosen) {
return new DosenResource(true, 'Detail Data Dosen!', $dosen);
}
return new DosenResource(false, 'Detail Data Dosen Tidak Ditemukan', null);
}
// UNTUK MENGUPDATE/MENGEDIT DATA DOSEN
public function update(Request $request, Dosen $dosen)
{
if ($dosen) {
$validator = Validator::make($request->all(), [
'nidn' => 'required|unique:dosens,nidn,' . $dosen->id,
'nip' => 'required|unique:dosens,nip,' . $dosen->id,
'nama_lengkap' => 'required|string|max:100',
'jenis_kelamin' => 'required|boolean',
'kelompok_keahlian' => 'required|string|max:100',
'bidang_keilmuan' => 'required|string|max:100',
'jabatan_fungsional'=> 'required|string|max:50',
'tmt' => 'required|date',
'prodi_id' => 'required|exists:prodies,id',
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
$dosen->update($request->all());
return new DosenResource(true, 'Data Dosen Berhasil Diupdate', $dosen);
}
return new DosenResource(false, 'Data Dosen Tidak Ditemukan', null);
}
// UNTUK MENGHAPUS DATA DOSEN
public function destroy(Dosen $dosen)
{
if ($dosen) {
$dosen->delete();
return new DosenResource(true, 'Data Dosen Berhasil Dihapus', null);
}
return new DosenResource(false, 'Data Dosen Tidak Ditemukan', null);
}
}
Seperti pada Mahasiswa, kita perlu membuat Resource untuk Dosen.
Perintah:
php artisan make:resource DosenResource
Kemudian edit resource ini di app/Http/Resources/DosenResource.php
.
File: app/Http/Resources/DosenResource.php
:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class DosenResource extends JsonResource
{
public $status;
public $message;
public function __construct($status, $message, $resource)
{
parent::__construct($resource);
$this->status = $status;
$this->message = $message;
}
/**
* Transform the resource into an array.
*
* @return array<string, mixed>
*/
public function toArray(Request $request): array
{
return [
'success' => $this->status,
'message' => $this->message,
'data' => $this->resource ?? []
];
}
}
Menambahkan route untuk API Dosen.
File: routes/api.php
:
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\Admin\LoginController;
Route::prefix('admin')->group(function () {
Route::post('/login', [LoginController::class, 'index'])->name('admin.login');
Route::group(['middleware' => 'auth:api_admin'], function () {
Route::get('/user', [LoginController::class, 'getUser'])->name('admin.user');
Route::get('/refresh', [LoginController::class, 'refreshToken'])->name('admin.refresh');
Route::post('/logout', [LoginController::class, 'logout'])->name('admin.logout');
Route::apiResource('/mahasiswa', App\Http\Controllers\Api\Admin\MahasiswaController::class, ['except' => ['create', 'edit'], 'as' => 'admin']);
Route::apiResource('/dosen', App\Http\Controllers\Api\Admin\DosenController::class, ['except' => ['create', 'edit'], 'as' => 'admin']);
});
});
8. Memodifikasi file database/seeders/DatabaseSeeder.php
supaya kita up data sekaligus satu perintah aja
File: database/seeders/DatabaseSeeder.php
:
<?php
namespace Database\Seeders;
use App\Models\User;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
// User::factory(10)->create();
$this->call([
UserSeeder::class,
ProdiSeeder::class,
MahasiswaSeeder::class,
DosenSeeder::class,
]);
}
}
Jalankan ini dulu supaya mengosongkan data yang dulunya pernah di up
php artisan db:wipe
Disusul dengan comand bash ini
php artisan migrate:refresh
Setelah semua dan sekian lamanya, disave dan di ini itukan ya sekarang kita run kan dengan mengetik di bash root
php artisan db:seed
{
"nidn": "1101010101",
"nip": "3303030303",
"nama_lengkap": "Umar apa Gampong",
"jenis_kelamin": false, // 0 = Perempuan
"kelompok_keahlian": "Matematika Murni",
"bidang_keilmuan": "Aljabar Linier",
"jabatan_fungsional": "Lektor",
"tmt": "2016-05-01",
"prodi_id": 2
}
1.Menghapus semua cache aplikasi.
php artisan cache:clear
2.Menghapus cache konfigurasi.
php artisan config:clear
3.Menghapus cache route.
php artisan route:clear