Add models and migrations for Anggota, Buku, Kategori, and Peminjaman

This commit is contained in:
2026-03-17 19:16:26 +07:00
parent 1aff175819
commit e8e28349fc
8 changed files with 242 additions and 0 deletions

30
app/Models/Anggota.php Normal file
View File

@@ -0,0 +1,30 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Anggota extends Model
{
use HasFactory, SoftDeletes;
protected $fillable = [
'nama',
'email',
'no_telepon',
'alamat',
'tanggal_bergabung',
'status',
];
protected $casts = [
'tanggal_bergabung' => 'date',
];
public function peminjamans()
{
return $this->hasMany(Peminjaman::class);
}
}

35
app/Models/Buku.php Normal file
View File

@@ -0,0 +1,35 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Buku extends Model
{
use HasFactory, SoftDeletes;
protected $fillable = [
'kategori_id',
'judul',
'pengarang',
'penerbit',
'tahun_terbit',
'isbn',
'stok',
'stok_tersedia',
'sinopsis',
'cover',
];
public function kategori()
{
return $this->belongsTo(Kategori::class);
}
public function peminjamans()
{
return $this->hasMany(Peminjaman::class);
}
}

21
app/Models/Kategori.php Normal file
View File

@@ -0,0 +1,21 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Kategori extends Model
{
use HasFactory;
protected $fillable = [
'nama_kategori',
'deskripsi',
];
public function bukus()
{
return $this->hasMany(Buku::class);
}
}

38
app/Models/Peminjaman.php Normal file
View File

@@ -0,0 +1,38 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Peminjaman extends Model
{
use HasFactory;
protected $fillable = [
'anggota_id',
'buku_id',
'tanggal_pinjam',
'tanggal_kembali_rencana',
'tanggal_kembali_aktual',
'status',
'denda',
'catatan',
];
protected $casts = [
'tanggal_pinjam' => 'date',
'tanggal_kembali_rencana' => 'date',
'tanggal_kembali_aktual' => 'date',
];
public function anggota()
{
return $this->belongsTo(Anggota::class);
}
public function buku()
{
return $this->belongsTo(Buku::class);
}
}

View File

@@ -0,0 +1,34 @@
<?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('anggotas', function (Blueprint $table) {
$table->id();
$table->string('nama');
$table->string('email')->unique();
$table->string('no_telepon', 15)->nullable();
$table->text('alamat')->nullable();
$table->date('tanggal_bergabung');
$table->enum('status', ['aktif', 'nonaktif'])->default('aktif');
$table->timestamps();
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('anggotas');
}
};

View File

@@ -0,0 +1,23 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('kategoris', function (Blueprint $table) {
$table->id();
$table->string('nama_kategori');
$table->text('deskripsi')->nullable();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('kategoris');
}
};

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('bukus', function (Blueprint $table) {
$table->id();
$table->foreignId('kategori_id')->constrained('kategoris')->onDelete('cascade');
$table->string('judul');
$table->string('pengarang');
$table->string('penerbit');
$table->year('tahun_terbit');
$table->string('isbn', 20)->unique();
$table->integer('stok')->default(0);
$table->integer('stok_tersedia')->default(0);
$table->text('sinopsis')->nullable();
$table->string('cover')->nullable();
$table->timestamps();
$table->softDeletes();
});
}
public function down(): void
{
Schema::dropIfExists('bukus');
}
};

View File

@@ -0,0 +1,29 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('peminjamans', function (Blueprint $table) {
$table->id();
$table->foreignId('anggota_id')->constrained('anggotas')->onDelete('cascade');
$table->foreignId('buku_id')->constrained('bukus')->onDelete('cascade');
$table->date('tanggal_pinjam');
$table->date('tanggal_kembali_rencana');
$table->date('tanggal_kembali_aktual')->nullable();
$table->enum('status', ['dipinjam', 'dikembalikan', 'terlambat'])->default('dipinjam');
$table->integer('denda')->default(0);
$table->text('catatan')->nullable();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('peminjamans');
}
};