2012-01-17 10 views
1

私は2つのモデル間の多対多の関係を作成しようとしている:Kohanaの3.2 ORM - 間違ったフィールド名

:Users_RoleとUsers_Right

class Model_Users_Role extends ORM{ 
    protected $_has_many = array(
     'rights' => array(
      'model' => 'users_right', 
      'through' => 'users_roles_rights', 
     ), 
    ); 
} 

class Model_Users_Right extends ORM{  
    protected $_has_many = array(
     'roles' => array(
      'model' => 'users_role', 
      'through' => 'users_roles_rights', 
     ), 
    ); 
} 

私はこれをやろうとしています

$role = ORM::factory('users_role', 1); 
$right = ORM::factory('users_right', 1); 
$right->add('roles', $role); 

エラー:私はトンをしようと試み

Database_Exception [ 1054 ]: Unknown column 'role_id' in 'field list' [ INSERT INTO `users_roles_rights` (`users_right_id`, `role_id`) VALUES ('1', '1') ] 

O反対側にそれを作る:

$role = ORM::factory('users_role', 1); 
$right = ORM::factory('users_right', 1);   
$role->add('rights', $right); 

新しいエラー:

Database_Exception [ 1054 ]: Unknown column 'right_id' in 'field list' [ INSERT INTO `users_roles_rights` (`users_role_id`, `right_id`) VALUES ('1', '1') ] 

を私はORMは、ピボットテーブルでusers_role_idusers_right_idフィールド名を使用することが期待が、それははるかに重要なの間違った名前を使用していますか?どこで私は間違いをしたのですか?

+0

配列に 'far_key'を追加しました。データが正常に追加されました。しかし、同じ関係をもう一度追加しようとすると、kohana広告が同じ行をピボット・テーブルに追加します。どうして? – user1151990

答えて

2

default values are setを確認してください。これを試してみてください :

class Model_Users_Role extends ORM{ 
    protected $_has_many = array(
     'rights' => array(
      'model' => 'users_right', 
      'far_key' => 'users_right_id', 
      'through' => 'users_roles_rights', 
     ), 
    ); 
} 

class Model_Users_Right extends ORM{  
    protected $_has_many = array(
     'roles' => array(
      'model' => 'users_role', 
      'far_key' => 'users_role_id', 
      'through' => 'users_roles_rights', 
     ), 
    ); 
} 

Kohanaのは関係がまだ存在していないことを確認していません。

2つの外部キー列の複合ユニークキーを使用してこれをデータベーステーブルに適用するか、追加する前に関係が存在しないことをコードでチェックします。

関連する問題