Alex Coroza
Alex Coroza

Reputation: 1757

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>';

Upvotes: 0

Views: 208

Answers (1)

Alex Coroza
Alex Coroza

Reputation: 1757

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.

Upvotes: 0

Related Questions