2026-04-13 19:04:12 +05:30

87 lines
3.0 KiB
PHP

<?php
namespace App\Models;
use CodeIgniter\Model;
class DoctorModel extends Model
{
protected $table = 'doctors';
protected $primaryKey = 'id';
protected $useAutoIncrement = true;
protected $returnType = 'array';
protected $useSoftDeletes = false;
protected $protectFields = true;
protected $allowedFields = ['user_id','specialization','experience','fees'];
protected bool $allowEmptyInserts = false;
protected bool $updateOnlyChanged = true;
protected array $casts = [];
protected array $castHandlers = [];
// Dates
protected $useTimestamps = false;
protected $dateFormat = 'datetime';
protected $createdField = 'created_at';
protected $updatedField = 'updated_at';
protected $deletedField = 'deleted_at';
// Validation
protected $validationRules = [];
protected $validationMessages = [];
protected $skipValidation = false;
protected $cleanValidationRules = true;
// Callbacks
protected $allowCallbacks = true;
protected $beforeInsert = [];
protected $afterInsert = [];
protected $beforeUpdate = [];
protected $afterUpdate = [];
protected $beforeFind = [];
protected $afterFind = [];
protected $beforeDelete = [];
protected $afterDelete = [];
public function findByUserId(int $userId): ?array
{
$row = $this->where('user_id', $userId)->first();
return $row ?: null;
}
public function getAdminDoctorList(string $sortBy = 'doctor_id', string $sortDir = 'asc'): array
{
$fullNameSql = "TRIM(CONCAT(COALESCE(users.first_name, ''), ' ', COALESCE(users.last_name, '')))";
$sortColumns = [
'doctor_id' => 'users.id',
'name' => $fullNameSql,
'email' => 'users.email',
'specialization' => 'doctors.specialization',
'experience' => 'doctors.experience',
'fees' => 'doctors.fees',
'status' => 'users.status',
];
$sortColumn = $sortColumns[$sortBy] ?? 'users.id';
$sortDir = strtolower($sortDir) === 'desc' ? 'DESC' : 'ASC';
return $this->asObject()
->select("users.id as user_id, COALESCE(NULLIF(users.formatted_user_id, ''), CONCAT('PHY', LPAD(users.id, 7, '0'))) as formatted_user_id, {$fullNameSql} as name, users.email, users.first_name, users.last_name, users.status, doctors.id, doctors.specialization, doctors.experience, doctors.fees")
->join('users', 'users.id = doctors.user_id')
->where('users.role', 'doctor')
->orderBy($sortColumn, $sortDir)
->findAll();
}
public function getLatestDoctors(int $limit = 5): array
{
return $this->select("TRIM(CONCAT(COALESCE(users.first_name, ''), ' ', COALESCE(users.last_name, ''))) as name, doctors.specialization")
->join('users', 'users.id = doctors.user_id')
->orderBy('doctors.id', 'DESC')
->findAll($limit);
}
}