2010-01-28 6 views
1

별표로 한 모금 줄을 관리하는 Kohaha 응용 프로그램을 작성하고 있습니다.Kohana ORM에서 다른 외래 키 이름이있는 테이블을 어떻게 관련 시키나요?

저는 ORM을 사용하고 싶지만 이미 잘 정립 된 특정 테이블을 어떻게 연관 지 생각해 봅니다.

테이블 sip_lines는 다음과 같습니다. 이되지 않을 것 같은

두 개의 테이블이 실제로 sip_lines.sip_name = sip_buddies.name

으로 관련

+----------------+------------------------------+------+-----+-----------+----------------+ 
| Field   | Type       | Null | Key | Default | Extra   | 
+----------------+------------------------------+------+-----+-----------+----------------+ 
| id    | int(11)      | NO | PRI | NULL  | auto_increment | 
| name   | varchar(80)     | NO | UNI |   |    | 
| host   | varchar(31)     | NO |  |   |    | |    | 
| lastms   | int(11)      | NO |  | 0   
*** snip *** 
+----------------+------------------------------+------+-----+-----------+----------------+ 

가 어떻게 Kohana ORM에서 그들을 관련이 있는가 :

+--------------------+------------------+------+-----+-------------------+-----------------------------+ 
| Field    | Type    | Null | Key | Default   | Extra      | 
+--------------------+------------------+------+-----+-------------------+-----------------------------+ 
| id     | int(10) unsigned | NO | PRI | NULL    | auto_increment    | 
| sip_name   | varchar(80)  | NO | UNI | NULL    |        | 
| displayname  | varchar(48)  | NO |  | NULL    |        | 
| line_num   | varchar(10)  | NO | MUL | NULL    |        | 
| model    | varchar(12)  | NO | MUL | NULL    |        | 
| mac    | varchar(16)  | NO | MUL | NULL    |        | 
| areacode   | varchar(6)  | NO | MUL | NULL    |        | 
| per_line_astpp_acc | tinyint(1)  | NO |  | 0     |        | 
| play_warning  | tinyint(1)  | NO |  | 0     |        | 
| callout_disabled | tinyint(1)  | NO |  | 0     |        | 
| notes    | varchar(80)  | NO |  | NULL    |        | 
| last_update  | timestamp  | NO |  | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | 
+--------------------+------------------+------+-----+-------------------+-----------------------------+ 

sip_buddies이있다 아주 옳은가?

<?php defined('SYSPATH') or die('No direct script access.'); 

/* A model for all the account information */ 
class Sip_Line_Model extends ORM 
{ 
    protected $has_one = array("sip_buddies"); 
} 

?> 

편집 : 실제로 이러한 테이블은 외래 키와 적절하게 관련되어 있지 않습니다. doh.

EDIT : Kohana ORM처럼 유연하지 않습니다. ORM은 아마도 데이터 모델이 변경 될 수있는 완전히 새로운 프로젝트에 가장 적합하게 작동하는 방법이 아닙니다. 특정 이름 지정 규칙을 따라야하는 이유는 Kohana에 과 관련이 없기 때문입니다.

+0

만약 이것이 새로운 프로젝트이고 이런 식으로 할 필요가 없다면; DB 스키마를 조정하는 것을 고려해야합니다. 이름 대신 ID를 사용하여 다른 테이블의 데이터를 연결하는 것이 좋습니다. – Seth

+0

기존 데이터베이스 위에 새로운 프로젝트가 추가되었습니다. 따라서 필드 이름을 정확하게 변경할 수있는 권한이 없습니다. – Matt

답변

0

일대일 관계를 사용하려는 경우에만 정확합니다. 그러나 일대 다 관계를 가질 계획이라면 $ has_many를 사용하는 것이 좋습니다. 필요에 따라 선택적으로 다른 테이블에 대한 모델을 만들고 그 테이블에 대해 $ belongs_to를 사용할 수 있습니다.

모두 여기에 설명 된 것 : http://docs.kohanaphp.com/libraries/orm/starting

+0

ORM의 테이블 관계 기능을 사용할 수 있으므로 올바르지 않습니다. 예 : find_related_ $ child 마치 연결된 것이 아닙니다. – Matt

1

그것은 kohana의 ORM까지하지만 DB 설계까지이 아니다. 항상 정수를 외래 키로 사용하고 varchar로 사용하는 것은 "규칙"이었습니다. 연령대별로 이런 디자인을 보지 못했습니다.

정수 FK를 추가하거나 ORM을 전혀 사용하지 않는 것으로 생각하면 그냥 그렇게 작동하지 않습니다.

편집 :

그리고 네가 정말로이 방법으로하고 싶다면 네.

protected $has_one = array('buddy' => array('model' => 'sip_buddy', 'foreign_key' => 'name')); 
+0

내가 어떻게이 오래된 주제 인 롤인지 모르겠다. – Kemo

관련 문제