Nxdom Framework

Nusantara eXtreme Development Object Model — dokumentasi resmi

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.