phpkohana-ormkohana-2

Kohana 2.3 establish has one relationship between two tables with primary keys not named as "id"


I have two tables. applicants and applicant_accounts.

applicants
 ->applicant_id   int(11) PK
 ->name           varchar(45)

applicant_accounts 
 ->account_id     int(11) PK
 ->applicant_id   int(11) 
 ->userName       varchar(45)

I've put this code code in my Applicants_Model it does'nt worked.

protected $has_one = array('applicant_account' => array('model' => 'Applicant_Account', 'foreign_key' => 'applicant_id'));

I tried to rename the primary keys into "id" and achieved my desired result by putting this code in my Applicants_Model.

protected $has_one = array('applicant_account');

And then accessed data from it by this

$applicant = ORM::factory('applicant', 1);
echo $applicant->name.' ----> '.$applicant->applicant_account->userName;

Please help me.I need to know how to have has_one relationship within two tables with primary keys not named as "id"

Applicant_Model

<?php defined('SYSPATH') OR die('No direct access allowed.');

class Applicant_Model extends ORM {

    protected $has_one = array('applicant_account' => array('model' => 'Applicant', 'foreign_key' => 'applicant_id'));

    protected $primary_key = 'applicant_id';

}

Applicant_Account_Model

<?php defined('SYSPATH') OR die('No direct access allowed.');

class Applicant_Account_Model extends ORM {

    protected $primary_key = 'account_id';

}

testing.php(for displaying purposes only)

$applicants = ORM::factory('applicant', 1);
echo $applicant->name.' | '.$applicant->applicant_account->userName.'<br>';

Solution

  • Well my supervisor arrived here lately and he solved my problem. He changed the codes in the Applicant_Model into this:

    <?php defined('SYSPATH') OR die('No direct access allowed.');
    
    class Applicant_Model extends ORM {
    
        protected $primary_key = 'applicant_id';
        protected $has_one = array('applicant_account');
    
        public function foreign_key() {
    
            $foreign_keys = array('applicant_account' => 'applicant_id');
    
            return $foreign_keys['applicant_account'];
        }
    
    }
    

    I dont really know what exactly he did but he said that he used a function inside the ORM.php and then used it to override the name of the foreign key. I hope this answer will help others.