Field Exclusion (noSelect)
NexaModel menyediakan method untuk mengecualikan kolom tertentu dari query SELECT, memberikan fleksibilitas dalam memilih data yang diambil dari database.
NexaModel · Storage() · NexaDb
$this->Storage('news')->where()->first();NexaModel menyediakan method untuk mengecualikan kolom tertentu dari query SELECT, memberikan fleksibilitas dalam memilih data yang diambil dari database.
Basic Field Exclusion
noSelect() Method
// Mengecualikan kolom password dan remember_token
$users = $this->Storage('users')
->noSelect(['password', 'remember_token'])
->get();
// Menggunakan string (comma-separated)
$users = $this->Storage('users')
->noSelect('password,remember_token,api_key')
->get();
Method Aliases
// Semua method ini berfungsi sama dengan noSelect()
$users = $this->Storage('users')->except(['password', 'remember_token'])->get();
$users = $this->Storage('users')->exclude(['password', 'remember_token'])->get();
$users = $this->Storage('users')->without(['password', 'remember_token'])->get();
$users = $this->Storage('users')->ignore(['password', 'remember_token'])->get();
$users = $this->Storage('users')->skipFields(['password', 'remember_token'])->get();
Manual Column List Methods
exceptFrom(), noSelectFrom(), withoutFrom()
Untuk situasi ketika Anda sudah mengetahui daftar kolom yang tersedia:
// Daftar kolom manual
$allColumns = ['id', 'name', 'email', 'password', 'remember_token', 'created_at', 'updated_at'];
// Mengecualikan kolom tertentu dari daftar manual
$users = $this->Storage('users')
->exceptFrom(['password', 'remember_token'], $allColumns)
->get();
// Method alias lainnya
$users = $this->Storage('users')->noSelectFrom(['password'], $allColumns)->get();
$users = $this->Storage('users')->withoutFrom(['password'], $allColumns)->get();
Shortcut Methods
Predefined Exclusions
// Tidak memilih field password
$users = $this->Storage('users')->noPassword()->get();
// Tidak memilih field timestamps (created_at, updated_at, deleted_at)
$users = $this->Storage('users')->noTimestamps()->get();
// Tidak memilih field sensitif (password, tokens, keys, dll.)
$users = $this->Storage('users')->noSensitive()->get();
// Tidak memilih field token (remember_token, api_token, dll.)
$users = $this->Storage('users')->noTokens()->get();
// Tidak memilih field ID
$users = $this->Storage('users')->noId()->get();
// Tidak memilih field sistem (id + timestamps)
$users = $this->Storage('users')->noSystem()->get();
Sensitive Fields Categories
// noSensitive() mengecualikan field-field ini:
$sensitiveFields = [
'password', 'password_hash', 'remember_token', 'api_token', 'api_key',
'secret', 'secret_key', 'access_token', 'refresh_token', 'private_key', 'salt'
];
// noTimestamps() mengecualikan field-field ini:
$timestampFields = ['created_at', 'updated_at', 'deleted_at'];
// noTokens() mengecualikan field-field ini:
$tokenFields = [
'remember_token', 'api_token', 'access_token', 'refresh_token',
'api_key', 'secret_key'
];
// noSystem() mengecualikan field-field ini:
$systemFields = ['id', 'created_at', 'updated_at', 'deleted_at'];
Advanced Sensitive Fields
// Mengecualikan field sensitif dengan tambahan field custom
$users = $this->Storage('users')
->exceptSensitive(['phone', 'address'])
->get();
// Mengecualikan field timestamp dengan tambahan field custom
$users = $this->Storage('users')
->exceptTimestamps(['slug', 'meta_data'])
->get();
// Mengecualikan field sistem dengan tambahan field custom
$users = $this->Storage('users')
->exceptSystemFields(['internal_notes'])
->get();
Advanced Field Selection
selectPublicFields()
Memilih hanya field publik yang aman untuk ditampilkan:
// Memilih field publik dengan tambahan field
$users = $this->Storage('users')
->selectPublicFields(['status', 'role'])
->get();
// Field publik default: id, name, email, status, created_at
selectMinimal()
Memilih field minimal untuk listing atau API:
// Field minimal default (id, name, email)
$users = $this->Storage('users')
->selectMinimal()
->get();
// Field minimal custom dengan field tambahan
$users = $this->Storage('users')
->selectMinimal(['id', 'username', 'email'], ['status', 'last_login'])
->get();
Chaining with Other Methods
// Kombinasi dengan method lain
$users = $this->Storage('users')
->noSensitive()
->where('status', 'active')
->orderBy('name')
->limit(50)
->get();
// Dengan join
$users = $this->Storage('users')
->noPassword()
->leftJoin('profiles', 'users.id', '=', 'profiles.user_id')
->select(['users.*', 'profiles.bio'])
->get();
// Dengan aggregation
$stats = $this->Storage('users')
->noSensitive()
->countByGroup('status');
Real World Examples
API Endpoint (Safe Data)
public function getUsersForAPI()
{
return $this->Storage('users')
->noSensitive()
->where('status', 'active')
->selectMinimal(['id', 'name', 'email'], ['avatar', 'status'])
->paginate(1, 20);
}
Admin Dashboard (No Sensitive Data)
public function getUsersForAdmin()
{
return $this->Storage('users')
->noPassword()
->noTokens()
->orderBy('created_at', 'DESC')
->get();
}
Public Profile Display
public function getPublicProfile($userId)
{
return $this->Storage('users')
->selectPublicFields(['bio', 'website'])
->where('id', $userId)
->first();
}
Lanjut
Topik sebelumnya: Query Builder. Topik berikutnya: Record Exclusion (noSelectFields). Lihat juga Models, Events, Helper & template, daftar dokumentasi.