Cara mudah Insert & Update Tabel dengan Doctrine


save
save data! insert or update

Setelah membahas cara menampilkan data, maka sekarang saatnya kita akan membahas cara menginput data baru (insert) atau mengedit data (update). Pada prinsip nya penggunaan Doctrine untuk melakukan insert dan update data adalah sama.

Doctrine menyediakan cara yang sangat mudah untuk melakukan insert dan update data. Namun sebelumnya Anda harus sudah menyiapkan form inputan data, yang nantinya akan meminta data dari user kemudian data itu dikirim dan diolah untuk masuk ke database.

Penasaran caranya?

Logika dasar penggunaan Doctrine untuk masalah ini sangat sederhana. Sebelumnya Anda harus punya Form inputan, sesuai field yang akan diisikan ke table. Kemudia hasil inputan form tersebut akan ditangkap dan diolah menggunakan Doctrine untuk dimasukkan ke Table. Jika data yang akan dimasukkan sudah ada, maka ini adalah proses update. Jika data yang akan dimasukkan belum ada, maka ini adalah proses insert. Sedangkan untuk proses penyimpanan, baik untuk kebutuhan insert maupun update, pada Doctrine dikenal dengan istilah save.

Untuk menu hidangan kali ini kita akan membahas mulai dari pembuatan form inputan sampai penyimpanan data inputan, yang semuanya menggunakan Doctrine. Asumsi nya Anda telah memiliki Model dan schema.yml, serta telah memiliki 1 tabel yang akan dimanipulasi. Pada Contoh ini kita menggunakan Table user dengan nama Model User.

1. Pembuatan Class Form dengan Doctrine

Cara membuat Class Form (library) sudah pernah kita bahas pada artikel sebelumnya. Penggunaan Class Form akan mempermudah kita dalam penggunaan form itu nantinya secara berulang-ulang.

Tapi sebenarnya ada cara yang lebih mudah lagi dalam pembuatan form, dengan bantuan Doctrine. Syaratnya, kita sudah menyediakan schema.yml dan model dari table yang kita miliki. Doctrine akan secara otomatis membuatkan class form yang berisi widget, validator, dan syarat lainnya, sesuai dengan konfigurasi table-database yang telah dibuat.

Cara nya sangat mudah, gunakan command symfony berikut ini,

> symfony doctrine:build-forms

Untuk melihat hasilnya, silahkan dilihat pada direktory lib/form/doctrine. Anda juga dapat melakukan modifikasi pada form tersebut, misalnya pada settingan widget, validator dan label.

2. Penggunaan Form dan Handling Submission

Begitu mudahnya ternyata kita bisa membuat form secara otomatis berdasarkan tabel. Maka sekarang kita akan mencoba menggunakan class form yang telah dibuat tadi, kita akan tampilkan pada modul yang diinginkan. Seperti biasa pembuatannya akan menggunakan action.class untuk deklarasi class form dan template untuk menampilkan form nya. Langkah pertama adalah membuat modul sesuai kebutuhan. Kemudian,

Pendeklarasian pada action.class (contoh) dengan nama executeNewuser

public function executeNewuser(sfWebRequest $request) 
{   
   $this->formuser = new UserForm();	 
}

Penggunaan pada template, misal

<form action="<?php echo url_for('user/tambah');?>" method="POST">
<table>
<?php echo $formuser; ?>
<tr>
 <td colspan="2" >
   <input type="submit" value="simpan">
 </td>
</tr>
</table>
</form>

Mudah kan? ternyata untuk membuat tampilan Form sederhana kita hanya perlu melakukan beberapa line coding saja, dengan bantuan Doctrine.

Langkah berikut nya adalah melakukan handling submission. Caranya 100% sama dengan pembahasan tentang handling submission pada materi Form sebelumnya. Jadi Anda bisa langsung copy-paste scriptnya. Ini contoh simple nya,

$this->formuser = new UserForm();
//script mengecek validasi form 
if ($request->isMethod('post')) {
   $this->formuser->bind($request->getParameter('user'));
   if ($this->formuser->isValid()){
      // Simpan Inputan ke TABLE user
   }else{
      // jika tidak valid, tampilkan form inputan lagi
      $this->setTemplate('newuser');
   }
}

Dari contoh diatas, secara otomatis form yang kita buat dari Doctrine juga akan memiliki handling submission dan validasi.

eazy
feel free, easy Generate!

3. Proses Penyimpanan Data

Untuk penerapan Insert dan Update pada Doctrine, bisa menggunakan method save(). Perbedaannya adalah, untuk update kita perlu melakukan pencarian data terlebih dahulu, sedangkan untuk insert tidak. Intinya adalah, method save() hanya dimiliki oleh object Model Doctrine. Object ini bisa kita dapatkan dari class Model (tabel) baru, atau dari hasil pencarian record table.

Asumsi table yang akan di insert bernama user, maka kita cukup mendeklarasikan object dari Class Model User. Berikut ini contoh untuk membuat Object dari class Model (digunakan untuk Insert),

$datauser = new User();

Sedangkan jika ingin digunakan untuk melakukan update, maka kita tidak perlu menggunakan cara diatas. Cukup dengan melakukan pencarian data record yang akan di update dengan menggunakan Class Model.

$datauser = Doctrine::getTable('User')->find($id);

Ingat, penggunaan find() hanya untuk pencarian record berdasarkan Primary Key.

Nah! untuk proses selanjutnya, yaitu pengisian data ke Table, cara nya akan sama, yaitu menggunakan save(). Kita cukup melakukan set untuk setiap field yang ada pada table. Jika ada field “name” maka cara pengisiannya adalah setName($var). Berikut contohnya,

$datauser->setName('Udin');
$datauser->setDate('2010-12-11');
$datauser->setAddress('jl. Bukan Batu no.12345'); 
$datauser->setGender('Men'); 

$datauser->save(); // simpan data user ke table User

Mudah bukan.. oks, selamat ber-experiment lebih lanjut.

Hidup memang udah susah
Tapi jangan dibikin susah
Hidup memang bikin pusing
Jangan tambah dibawa pening
(slank)

 


10 responses to “Cara mudah Insert & Update Tabel dengan Doctrine”

  1. Asw Pak Topan, saya haryoso 🙂
    saya baca-baca blog pak Topan menarik dan mendidik nih.
    kalau artikel symfony yang pakai propel tidak ada pak? sebab saya pakai symfony 1.0 dan propel. saya masih bingung dengan model propel. saya juga buat masih pakai CRUD. -,-
    ada contoh tidak pak, untuk insert,update,delete dengan propel secara manual (tanpa CRUD) utk form simple saja ?
    terima kasih 🙂

  2. saya sudah baca referensinya, tapi saya belum menemukan utk kasus seperti ini:
    misal saya ingin menghitung total/jumlah nilai dari suatu kolom (kalau SQL nya “select SUM(kolom) from table” ), saya coba cara ini

    public function getTotal()
    { $c = new Criteria();
    $c->clearSelectColumns();
    $c->addSelectColumn('SUM('.TablePeer::COLUMN.')');
    $result = TablePeer::doSelectRS($c);

    }

    dan pakai cara custom SQL (cara ini lebih saya suka karna SQL nya jelas 🙂 )

    public static function getTotal()
    {
    $con = Propel::getConnection();
    $sql = "SELECT SUM(kolom) FROM table";
    $stmt = $con->createStatement();
    $rs = $stmt->executeQuery($sql, ResultSet::FETCHMODE_NUM);
    return TablePeer::populateObjects($rs);
    }

    tapi kedua cara tsb belum bisa, sebaiknya bagaimana ya? apa ada yang salah?
    terima kasih

  3. Pak saya punya masalah input data bertipe date ke database pak, masalahnya array pak saya sudah cari tapi tidak ketemu solusinya.

    public function executeSimpanorder(sfWebRequest $request)
    {
    $this->orderpembelian = $request->getParameter(‘order_pembelian’);
    $simpan = new OrderPembelian();

    $idk = $this->getUser()->getAttribute(‘idk’);

    $simpan ->setid_karyawan($idk);
    //$simpan ->settgl_permintaan($this->orderpembelian[‘tgl_permintaan’]);
    //$simpan ->settgl_dibutuhkan($this->orderpembelian[‘tgl_dibutuhkan’]);
    $simpan ->setstatus_approval(‘Belum diapprove’);
    $simpan ->save();
    $this ->redirect(‘orderpembelian/index’);
    }

    Yang saya beri tag komentar (‘//’) , itu yang jadi masalah pak, mohon bantuannya pak..
    hhe

    • coba di tampilkan dulu isi variable tanggal yg ingin diinputkan ke DB.. apakah sama format nya dengan format date yang ada di table DB..

      btw, pesan error nya apa ya?? :p

Leave a Reply

Your email address will not be published. Required fields are marked *