Prado sudah mendukung relationship untuk penggunaan ActiveRecord. Penggunaan relationship ini akan sangat memudahkan dalam query database.

Baru saja berhasil menerapkan relationship di activerecord Tukarduid.

Beberapa hal yang harus diperhatikan jika menemui Error : Unable to find foreign key relationships in table

1. Pastikan tabel formatnya InnoDB
Untuk mengaktifkan engine InnoDB, masuk ke folder server MySQL/bin. Buka file my.cnf dengan editor.

- Nonaktifkan baris ini ( kasih # )
skip-innodb

- Aktifkan baris2 dibawah ini
#innodb_data_home_dir = C:/xampp/xampp/mysql/data/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = C:/xampp/xampp/mysql/data/
#innodb_log_arch_dir = C:/xampp/xampp/mysql/data/

- Aktifkan baris2 dibawah ini. Set innodb_buffer_pool_size 50%-80% memori ram
#set-variable = innodb_buffer_pool_size=16M
#set-variable = innodb_additional_mem_pool_size=2M

- Aktifkan baris2 dibawah ini. Set innodb_log_file_size 25% dari innodb_buffer_pool_size
#set-variable = innodb_log_file_size=5M
#set-variable = innodb_log_buffer_size=8M
#innodb_flush_log_at_trx_commit=1
#set-variable = innodb_lock_wait_timeout=50

Sehingga baris-baris itu menjadi

#skip-innodb

innodb_data_home_dir = C:/xampp/xampp/mysql/data/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = C:/xampp/xampp/mysql/data/
innodb_log_arch_dir = C:/xampp/xampp/mysql/data/

set-variable = innodb_buffer_pool_size=16M
set-variable = innodb_additional_mem_pool_size=2M

set-variable = innodb_log_file_size=5M
set-variable = innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
set-variable = innodb_lock_wait_timeout=50

Simpan, dan restart MySQL server.

2. Jika belum mempunyai tabel database, buat tabel baru dengan TYPE / ENGINE = InnoDB bukan ISAM
Jika sudah mempunyai tabel, export ( dump ) tabel yang sudah ada. Kalau menggunakan PHPMyAdmin hasil dump/export biasanya berbentuk

CREATE TABLE tbl_bank (
number int AUTO_INCREMENT PRIMARY KEY,
name varchar(100) NOT NULL,
logo varchar(100) NOT NULL
) ENGINE=MyISAM;

Ubah bagian ENGINE sehingga menjadi

CREATE TABLE tbl_bank (
number int AUTO_INCREMENT PRIMARY KEY,
name varchar(100) NOT NULL,
logo varchar(100) NOT NULL
) ENGINE=InnoDB;

3. Tambahkan relationship untuk tabel. Contoh tabel dibawah ini, tbl_bank dengan PK nomor, tbl_acocunt dengan PK nomor dan FK id_bank yang merujuk ke PK nomor tbl_bank

CREATE TABLE tbl_account (
number int AUTO_INCREMENT PRIMARY KEY,
name varchar(100) NOT NULL,
account varchar(100) NOT NULL,
id_bank int NOT NULL,
FOREIGN KEY (id_bank)
REFERENCES tbl_bank(number) ON DELETE CASCADE
) ENGINE = InnoDB;

Isi datanya jika tabel masih kosong. Jika masih kosong masukkan perintah

INSERT INTO `tbl_bank` (`number`, `name`, `logo`) VALUES
(1, ‘Name1′, ‘Logo1′);

INSERT INTO `tbl_account` (`number`, `name`, `account`, `id_bank`) VALUES
(1, ‘Name1′, ‘Account1′, 1),
(2, ‘Name2′, ‘Account2′, 1);

Masuk ke shell prado-cli.php dan jalankan perintah ( BankRecord adalah activerecord class untuk tbl_bank )

BankRecord::finder()->with_bangt()->findAll()

Hasilnya

>> BankRecord::finder()->with_bangt()->findAll()
array
(
[0] => BankRecord#1
(
[number] => ‘1′
[name] => ‘Name1′
[logo] => ‘Logo1′
[*:_recordState] => 1
[TActiveRecord:_connection] => null
[TComponent:_e] => array()
[bangt] => array
(
[0] => AccountRecord#2
(
[number] => ‘1′
[name] => ‘Name1′
[account] => ‘Account1′
[id_bank] => ‘1′
[*:_recordState] => 1
[TActiveRecord:_connection] => null
[TComponent:_e] => array()
)
[1] => AccountRecord#3
(
[number] => ‘2′
[name] => ‘Name2′
[account] => ‘Account2′
[id_bank] => ‘1′
[*:_recordState] => 1
[TActiveRecord:_connection] => null
[TComponent:_e] => array()
)
)
)
)

Whoala .. jadi deh. Tinggal bikin page dan php untuk menggunakan active recordnya.

Tags: , ,

4 Celetukan untuk “Prado, Active Record dan Relationship”

  1. sofwanNo Gravatar says:

    Kalau anda dari Prado ke Code Igniter, saya dari Code Igniter ke Prado. Prado memang lebih sulit dari Code Igniter, kalau programmer nya berangkat dari PHP Native, karena konsep nya beda. CI masih lumayan akrab dengan PHP Native, tapi Prado engga begitu …

  2. EddyNo Gravatar says:

    Secara konsep sebenarnya saya ga menemui masalah pak. http://www.Tukarduid.com versi 3, yang per tanggal ini masih digunakan saya buat menggunakan Prado.

    Masalah terbesar sebenarnya di waktu load nya. Saya dah coba pakai accelerator, cache bawaan Prado dll yang disarankan Prado, tapi semua ga sesuai yang saya harapkan. Web terlalu lama untuk di load :) )
    Mungkin saya juga yg lom ahli di memaximalkan Prado

    Pakai CI jauh sekali performance loadnya. Lebih cepat.

  3. ErawanNo Gravatar says:

    Yup.
    Setuju Mas Edy.
    Tukarduid memang lama load websitenya.
    Tapi BTW, terima kasih banyak buat info di PHPnya…

  4. EddyNo Gravatar says:

    Sama – sama mas :)
    Moga-moga yang versi berikutnya ini bisa jauh lebih cepat karena pakai CI

Bebas Nyeletuk

Bebas digunakan : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>