Model
Manager untuk model aplikasi. Module ini tidak bisa berdiri sendiri, harus
ada module handler/driver yang bertugas melanjutkan tugas ke database yang
bersangkutan. Salah satu module yang bisa digunakan sebagai driver adalah
lib-model-mysql.
Instalasi
Jalankan perintah di bawah di folder aplikasi:
mim app install lib-model
Konfigurasi
Semua konfigurasi koneksi, dan read/write connection di definisikan seperti di bawah:
return [
// ...
'libModel' => [
'connections' => [
'/connection_name/' => [
'driver' => '/driver_name/',
'configs' => [
// connection configs
[...],
[...]
]
],
'default' => [
'driver' => 'mysql',
'configs' => [
[
'host' => 'locahost',
// ...
],
[
'host' => 'localhost',
// ...
]
]
]
],
'model' => [
'Model\\Name' => 'default',
'Model\\Name\\Other' => [
'read' => 'default',
'write' => 'default2'
],
'Model\\Name\\*' => [
'read' => 'default'
]
],
'target' => [
'read' => 'default2',
'write' => 'other-connection'
],
'migrate' => [
'ignore' => [
'connections' => ['default','other-connection']
]
]
]
// ...
];
Konfigurasi connections berisi informasi driver yang akan digunakan,
dan konfigurasi koneksi driver. Nilai driver menentukan driver apa yang
digunakan untuk handler koneksi ini, sementara properti configs berisi daftar
opsi koneksi. Jika opsi koneksi pertama gagal, maka koneksi selanjutnya akan
dicoba.
Konfigurasi model menentukan driver/konenksi mana yang digunakan oleh suatu
model. Nilai ini adalah model->connection_name pair yang mana connection_name
bisa berupa string berisi nama koneksi untuk read dan write. Atau bisa juga
array untuk mendefinisikan masing-masing koneksi untuk read dan write. Jika
menggunakan array, dan hanya salah satu yang ditentukan, maka sisanya mengambil
dari konfigurasi target. Nilai model name mungkin mengandung karakter * yang
berarti semua model dianggap cocok kecuali yang sudah ditentukan.
Opsi ketiga adalah target, yang menentukan default koneksi untuk read dan
write. Jika target koneksi suatu model tidak didefinisikan, atau hanya
mendefinisikan satu saja, maka sisanya diambil dari konfigurasi ini. Sebagai
catatan, suatu model harus memiliki driver yang sama untuk read dan write.
Opsi ke empat adalah migrate yang menentukan bagaimana proses migrasi database
dilakukan. Untuk saat ini, opsi yang didukung adalah ignore yang menentukan
daftar koneksi yang tidak akan di proses pada saat migrasi database.
Standar Model
Semua model harus meng-extends dari Mim\Model. Masing-masing model juga harus
memiliki properti-properti berikut:
chains::arrayDaftar hubungan masing-masing field tabel ini dengan field tabel yang lain.q::arrayDaftar field yang akan dicocokan dengan operatorLIKEjika pada kondisi where terdapat fieldq.table::stringNama tabel yang ditangani model ini.
Keterangan lebih lanjut tentang masing-masing properti ini ada pada pembahasan
Standar Model.
Custom Driver
Karena modul ini adalah manager, maka dia membutuhkan module yang bertugas
langsung menghubungkan aplikasi dengan database. Driver adalah class yang
bertugas untuk melakukan handler tersebut. Semua driver harus mengimplementasikan
interface LibModel\Iface\Driver.
Keterangan lebih lanjut tentang custom driver bisa di lihat di Custom Driver.
Penggunaan
Begitu suatu model didefinisikan, model tersebut kemudian bisa digunakan dari aplikasi seperti contoh di bawah:
use LibUser\Model\User;
$user_id = User::create(['name'=>'Mim']);
$user = User::getOne(['id'=>$user_id]);
Keterangan lebih lanjut tentang cara penggunaan bisa dilihat di Penggunaan.
Dan informasi lebih jelas tetang parameter $where bisa dilihat di
Kondisi Where.
Formatter
Jika module lib-formatter terpasang, beberapa tambahan type format
didefinisikan oleh module ini seperti multiple-object, object, chain,
children, dan partial. Informasi lebih jelas tentang formatter bisa dilihat
di Model Formatter.
Validator
Jika module lib-validator terpasang, maka module ini mendaftarkan tiga tipe
validasi:
uniqueMengecek keberadaan suatu data pada table untuk tujuan verifikasi.existsMemastikan data ada pada suatu tabel.exists-listMemastikan semua data array yang dikirim ada di database.
Migrasi
Module menerima route dari cli dengan perintah sebagai berikut:
mim [--table=..,..] migrate db
mim [--table=..,..] migrate test
mim [--table=..,..] migrate start
mim [--table=..,..] migrate schema (dirname)
Keterangan lebih lanjut tentang perintah ini ada pada Migrasi Model.