Belajar mengenal AR
AR yang dimaksudkan disini bukanlah AR (Account Receivables) namun (Active Record), jadi menurutku seperti rekaman object gitu kali ya, yang nantinya bisa di pergunakan untuk macam-macam kegunaan. maklum ya kalo salah, karena baru belajar juga neh pren.<!–more–>
untuk menghubungkan antara AR dengan database biasanya menggunakan class [CDbConnection] (Yii DAO)
Contoh :
'class'=>'system.db.CDbConnection', // [CActiveRecord::db]
** catatan : ini berlaku untuk default aplikasi kamu. jadi untuk koneksi beberapa database dalam satu penggunaan, maka harus menggunakan cara lain. Menurut yang saya baca2 bisa menggunakan [CActiveRecord::getDbConnection()].
Btw sebelum jauh saya kasih tau apa itu Yii DAO
Yii DAO adalah Data Access Object, fungsinya untuk mengakses DBMS.
Yii DAO terdiri dari empat kelas utama sebagai berikut:
- [CDbConnection]: mewakili koneksi ke database.
- [CDbCommand]: mewakili pernyataan SQL untuk dijalankan pada database.
- [CDbDataReader]: mewakili forward-only stream terhadap baris dari set hasil queri.
- [CDbTransaction]: mewakili transaksi DB.
Contoh :
$connection=new CDbConnection($dsn,$username,$password);
$connection->active=true; // buka koneksi
$connection->active=false; // tutup koneksi
$sql = "select blablablabaab"; // contoh query sql
$command=$connection->createCommand($sql);
- [execute()|CDbCommand::execute]: melakukan pernyataan SQL non-queri (Cth: Update, Delete, Insert)
- [query()|CDbCommand::query]: melakukan pernyataan SQL yang mengembalikan (Cth: Select)
Contoh penggunaan :
$rowCount=$command->execute(); // jalankan SQL non-queri
$dataReader=$command->query(); // jalankan queri SQL
$rows=$command->queryAll(); // queri dan kembalikan seluruh baris hasil
$row=$command->queryRow(); // query dan kembalikan baris pertama hasil
$column=$command->queryColumn(); // query dan kembalikan kolom pertama hasil
$value=$command->queryScalar(); // query dan kembalikan field pertama dalam baris pertama
// BACA QUERY / MENGAMBIL HASIL QUERY
$dataReader=$command->query();
while(($row=$dataReader->read())!==false) { ... } // memanggil read() secara terus menerus sampai ia mengembalikan false
foreach($dataReader as $row) { ... } // menggunakan foreach untuk menelusuri setiap baris data
$rows=$dataReader->readAll(); // mengambil seluruh baris sekaligus dalam satu array tunggal
Nah untuk info saja koneksi dari database untuk di rekam dalam AR itu harus dibaca dulu skema data atau metadatanya. ini membutuhkan waktu untuk prosesnya, jika skema data anda cukup besar lebih baik memperbesar caching durationnya. [CDbConnection::schemaCachingDuration].
Contoh :
'schemaCachingDuration'=>3600, // durasi menjadi 3600 detik
AR katanya hanya mendukung DBMS dibawah ini :
-
[MySQL 4.1 atau lebih tinggi]
-
[PostgreSQL 7.3 atau lebih tinggi]
-
[SQLite 2 dan 3]
-
[Microsoft SQL Server 2000 atau lebih tinggi]
-
[Oracle]
Untuk urusan CRUD (Cread Read Update Delete) Class AR sudah mendukung. Silahkan baca dibawah ini, mudah2an lebih mengerti dari pada baca Tutorial yang bertebaran di inet mengenai yii.
[color="#000080"]Ada permintaan neh dari agan junxiong untuk dijelaskan juga penggunaan fungsi-fungsi crudnya. aku jelasin sedikit yah, tapi kalo salah mohon dikoreksi, karena ini aku baru belajar jg.
Jadi fungsi save(), saveAttributes(), delete() itu berlaku / dipergunakan setelah data telah dibaca / direkam terlebih dahulu kedalam AR.
sekarang kita bicara yang agak mudah dimengerti dulu. yaitu fungsi save(boolean,array); or save($runValidation,$attributes);
-
runValidation itu sendiri jika diberi nilai true maka dia akan secara otomatis akan menjalankan fungsi validate($attributes);
Jika nilai dari attributes benar maka dia akan melakukan pengecekan data terakhir penyimpanan. jika benar data tersebut adalah data terakhir maka akan dijalankan fungsi update($attributes),
sebaliknya jika salah maka akan dijalankan fungsi insert($attributes);
Untuk saveAttributes() seharusnya sudah mengerti dunk kalo fungsi save() bisa dimengerti. ^^
saveAttributes(array); or saveAttributes($attributes); // menyimpan daftar attribute yang dipilih
Contoh :
$post=new Post;
$post->title='sample post';
$post->content='content for the sample post';
$dataYgDiSimpan = array('username'=>'YiieRz-sdgBlajar', 'password'=>'belajarYii', 'email'='yiierz-sdgblajar@yiiframework.com', 'createTime'=>time());
$post->saveAttributes($dataYgDisimpan);
attributes diatas dapat diisi dengan array attribute yang kita harapkan[/color]
MEMBACA DATA
MEMBACA DATA KE AR
// merekam baris sesuai dengan kondisi yang ditetapkan
$post=Post::model()->find($condition,$params);
// merekam baris sesuai dengan kunci primer yang ditetapkan
$post=Post::model()->findByPk($postID,$condition,$params);
// merekam baris dengan nilai atribut yang ditetapkan
$post=Post::model()->findByAttributes($attributes,$condition,$params);
// merekam baris pertama menggunakan pernyataan SQL yang ditetapkan
$post=Post::model()->findBySql($sql,$params);
Contoh 1 :
// cari baris dengan postID=10
$post=Post::model()->find('postID=:postID', array(':postID'=>10));</code>
Contoh 2:
<code>$criteria=new CDbCriteria;
$criteria->select='title'; // hanya memilih kolom 'title'
$criteria->condition='postID=:postID';
$criteria->params=array(':postID'=>10);
$post=Post::model()->find($criteria); // $params tidak diperlukan</code>
Contoh 3 :
<code>$post=Post::model()->find(array(
'select'=>'title',
'condition'=>'postID=:postID',
'params'=>array(':postID'=>10),
));
MEMBACA JUMLAH RECORD KE AR
// merekam jumlah baris yang sesuai dengan kondisi yang ditetapkan
$n=Post::model()->count($condition,$params);
// merekam jumlah baris menggunakan pernyataan SQL yang ditetapkan
$n=Post::model()->countBySql($sql,$params);
## MEMBACA PENGECEKAN EXISTS KE AR
// merekam apakah ada satu baris yang sesuai denga kondisi yang ditetapkan
$exists=Post::model()->exists($condition,$params);
SIMPAN DATA
SIMPAN DATA KE AR
// mutakhirkan baris yang sama seperti kondisi yang ditetapkan
Post::model()->updateAll($attributes,$condition,$params);
// mutakhirkan baris yang sama seperti kondisi dan kunci primer yang ditetapkan
Post::model()->updateByPk($pk,$attributes,$condition,$params);
// mutakhirkan kolom counter dalam baris yang sesuai dengan kondisi yang ditetapkan
Post::model()->updateCounters($counters,$condition,$params);
SIMPAN DATA KE DB
[save()|CActiveRecord::save]
Contoh :
$post=new Post;
$post->title='sample post';
$post->content='content for the sample post';
$post->createTime=time();
$post->save();
HAPUS DATA
HAPUS DATA DI AR
// hapus baris yang sesuai dengan kondisi yang ditetapkan
Post::model()->deleteAll($condition,$params);
// hapus baris yang sesuai dengan kondisi dan kunci primer yang ditetapkan
Post::model()->deleteByPk($pk,$condition,$params);
HAPUS DATA DI DB
Contoh :
[delete()|CActiveRecord::delete]
$post=Post::model()->findByPk(10); // menganggap ada tulisan yang memiliki ID = 10
$post->delete(); // hapus baris dari tabel database
VALIDASI DATA
VALIDASI DATA DI AR
– MEMBANDINGKAN REKAMAN AR
[CActiveRecord::equals()]
[primaryKey|CActiveRecord::primaryKey]
– KOSTOMISASI REKAMAN AR
[beforeValidate|CModel::beforeValidate]
[afterValidate|CModel::afterValidate]
[beforeSave|CActiveRecord::beforeSave]
[afterSave|CActiveRecord::afterSave]
?[beforeDelete|CActiveRecord::beforeDelete]
[afterDelete|CActiveRecord::afterDelete]
[afterConstruct|CActiveRecord::afterConstruct]
[afterFind|CActiveRecord::afterFind]
DAH AH SAMPE SINI DULU, NANTI BARU DILANJUTKAN.
Belajar urlManager
Untuk pemula biasanya bingung, kok saya akses website index.php/contact kok bisa ke site/contact. nah ini berarti anda sedang belajar routing web.
untuk route di yii bisa menggunakan urlManager.
urlManager sebetulnya sudah ada tutorialnya, namun kurang pas kalau tidak dibahas secara detail. saya akan coba kupas sedikit mengapa urlManager itu sangat penting diketahui.
saat kita mengakses index.php framework yii akan membaca file config kita contoh config/main.php yang salah satu isinya adalah component urlManager
berikut ini adalah default urlManager dari Yii Framework
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:\w>'=>'<controller>/<action>',
),
),
yang harus kita tahu adalah rules / aturan path
\w adalah string
\d adalah numeric
jadi jika ada site.com/webapp/contact
secara otomatis yg akan diproses oleh framework adalah
'<controller:\w+>/<action:\w>'=>'<controller>/<action>',
dia akan mencari pada SiteController.php yang memiliki class actionContact
sudah jelas kan mengenai urlManager
semoga membantu.