Appearance
Eloquent Domain Models & Database Schema
1. Relational Database Schema
mermaid
erDiagram
AcademicYear ||--o{ ClassModel : defines
AcademicYear ||--o{ Member : tracks
ClassModel ||--o{ Member : contains
Member ||--o{ DataCorrection : submits
Member ||--o{ AuditLog : generates
PortalApp ||--o{ ApiKey : integrates2. Comprehensive MariaDB Table Schema
2.1 Members Table (members)
Stores central user identities across all school roles.
sql
CREATE TABLE `members` (
`id` CHAR(36) PRIMARY KEY,
`nama` VARCHAR(255) NOT NULL,
`role` ENUM('siswa', 'guru', 'tendik', 'alumni', 'keluar') NOT NULL DEFAULT 'siswa',
`jenis_kelamin` ENUM('L', 'P') DEFAULT NULL,
`nik` VARCHAR(16) DEFAULT NULL UNIQUE,
`nisn` VARCHAR(10) DEFAULT NULL UNIQUE,
`nip` VARCHAR(25) DEFAULT NULL UNIQUE,
`tanggal_lahir` DATE NOT NULL,
`kelas` VARCHAR(50) DEFAULT NULL,
`academic_year_id` CHAR(36) DEFAULT NULL,
`dapodik_id` VARCHAR(64) DEFAULT NULL,
`google_id` VARCHAR(255) DEFAULT NULL UNIQUE,
`google_email` VARCHAR(255) DEFAULT NULL,
`is_claimed` TINYINT(1) NOT NULL DEFAULT 0,
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT `fk_member_academic` FOREIGN KEY (`academic_year_id`)
REFERENCES `academic_years`(`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;3. Core Eloquent Models
3.1 Academic Year Model (app/Models/AcademicYear.php)
php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class AcademicYear extends Model
{
protected $table = 'academic_years';
protected $keyType = 'string';
public $incrementing = false;
protected $fillable = [
'id', 'name', 'is_active'
];
public function getActive()
{
return self::where('is_active', 1)->first();
}
}