[Cakephp] Join Using Relationship

Deskripsi
     Mempelajari bagaimana cara menghubungkan relationship antara 2 model yang saling terkait, untuk tutorial kali ini saya akan menghubungkan kedua model melalui perantara foreign key, salah satunya bertindak sebagai base table karena dalam realitanya cara ini yang paling sering digunakan. untuk jenis relation lainnya bisa dipelajari sendiri.

Howto
1. Saya punya database (SQL Server 2005) dengan Spec berikut (contoh)  :
    table :  1. tr_client // transaction table
                         field : - id [PK]
                                  - id_client // this data refers to table ms_client
                                  - transaction

               2. ms_client // base table as master client
                                  - id_client [PK]
                                  - name
                                  - address
 
   Model for tr_client :
   <?php
   class tr_client extends AppModel
   {
    var $name = 'tr_client';
    var $useDBConfig = 'default';
    var $useTable = 'tr_client';
    var $primaryKey = array('id');
    }
   ?>

   Model for ms_client :
   <?php
   class ms_client extends AppModel
   {
    var $name = sm_client';
    var $useDBConfig = 'default';
    var $useTable = 'sm_client';
    var $primaryKey = array('id_client');
   ?>

   Now we create relation between 2 table, we add code at tr_client model,  why ? because that model which need the data, not ms_client model.

what's the code to create relationship ? here's :
    var $belongsTo = array(
                           'ms_client' => array('className' => 'ms_client',
                                                         'foreignKey' => 'id_client'
                           ));
* look at the green mark, you can learn it.


now add the code to tr_client :
 
   <?php
   class tr_client extends AppModel
   {
    var $name = tr_client';
    var $useDBConfig = 'default';
    var $useTable = 'tr_client';
    var $primaryKey = array('id');
 
    var $belongsTo = array(
                           'ms_client' => array('className' => 'ms_client',
                                                         'foreignKey' => 'id_client'
                            ));
    }
   ?>

ok , all done now when you query using statement something like this :
        
$data = $this->tr_client->find('all', array( 'field' => array( 'ms_client.name',
                                                                                       'tr_client.transaction',
                                                                          'limit' => 10,
                                                                          'conditions' => array('
tr_client.id' => '1'),
                                                                          'order'=>array('
ms_client.name=> 'ASC'));

* look at the green mark, we using tr_client model but we can grab field from another model, That's relationship !! easy right ?


what if we have multiple relation ?? how we do that ? look's this code and you'll be understand : 

    var $belongsTo = array(
                           'ZZZ' => array('className' => 'ZZZ',
                                                  'foreignKey' => 'AAA'
                                                 ),
        
                           'XXX' => array('className' => 'XXX',
                                                  'foreignKey' => 'BBB'

                                                 ),
   };


hope's this help :)

Post a Comment

Harap gunakan bahasa yang baik dan sopan, terima kasih