2012-01-03 2 views
1

Datamapper에서 관계를 디자인 할 때 관련 객체와 동일한 이름을 바인딩하도록 바인딩됩니다.이 클래스는 클래스 이름으로 Application_Model_User과 같은 것을 사용할 때 너무 편리하지 않습니다. "class"키가있는 구성 옵션이 있다고 말하려고하는 사람들에게는 알 수 있습니다. 그곳에 가봤습니다. 관련된 객체를 가져 오기 위해서만 작동하며, 객체를 업데이트하는 데는 사용되지 않습니다. 여기 관계 이름을 CI Datamapper의 관련 모델과 독립적으로 만들려면 어떻게해야합니까?

문제 재현하는 코드입니다 ". 역할 모델로 usermodel 연관 할 수 없습니다"

// User Model 
class UserModel extends Datamapper 
{ 
    public $table = 'users'; 
    public $has_many = array(
     'roles' => array(
      'class' => 'RoleModel', 
      'other_field' => 'usermodel', 
      'join_other_as' => 'role', 
      'join_self_as' => 'user', 
      'join_table' => 'users_roles' 
     ), 
    ); 
} 

class RoleModel extends DataMapper 
{ 
    public $table = 'roles'; 
    public $has_many = array(
     'usermodel' => array('class'  => 'UserModel', 
         'other_field' => 'roles', 
         'join_other_as'=> 'user', 
         'join_self_as' => 'role', 
         'join_table' => 'users_roles') 
    ); 
} 

// controller code. Make sure you have a role with INT id = 2, and a user with INT id = 5 in your db 
$user = new UserModel(2); 
$role = new RoleModel(5); 
$user->save($role); 

이 코드가 제공을 오류가 있지만 관계가 "roles"에서 "rolemodel"로 이름 변경되면 올바르게 작동합니다 (조인 테이블 user_roles에 새 레코드가 삽입됨을 의미).

그래서 도움이 될 수있는 CI의 Datamapper 사용자가 있으면 관계를 올바르게 정의하는 방법을 알려주십시오.

답변

2

당신은 관계 키를 사용하여 관계로서 객체를 저장할 수 있습니다

업데이트 :

$object->save($related, $relationship_key). 

그래서 당신은이 웹의 하단을 참조하십시오

$user->save($role, "roles"); 

을 사용해야합니다 페이지 : http://datamapper.wanwizard.eu/pages/save.html


누군가를 돕기 위해이 비트를 남겨주세요.

관계에 맞춤 이름을 지정하려는 것 같습니다. (그게 내가 모든 냉소주의를 넘어서 얻은 것입니다.) -

당신은 관계 배열의 키로 원하는 관계를 명명하게됩니다. 다음 스 니펫에서는 book <을 사용합니다. 클래스 이름과 같거나 다를 필요는 없습니다. 즉, class 키의 용도입니다.

class Author extends DataMapper { 
    $has_many = array(
    'book' => array( // YOU USE THIS KEY TO NAME THE RELATIONSHIP 
     'class' => 'book', 
     'other_field' => 'author', 
     'join_self_as' => 'author', 
     'join_other_as' => 'book', 
     'join_table' => 'authors_books' 
    ) 
); 
} 

이 방법이 효과가 없다면 관계 설정에 문제가있는 것 같습니다.

http://datamapper.wanwizard.eu/pages/advancedrelations.html

+0

안녕하세요 swatkins는 충분히 오래 걸리지 않은 것 같습니다. :) 나는 다음과 같이 썼다 : "클래스 키를 가진 구성 옵션이 있다고 말하려고 서둘러야하는 사람들을 위해, 나는 그것을 시도했다. 나는 내 견해를 증명하기 위해 간단히 예시를 제공 할 것이다. – Slavic

+0

거기에 코드 스 니펫을 추가했습니다. – Slavic

+1

좋아, 나는 당신의 질문을 오해했다 (코드 도움). 관계 키를 사용하여 객체를 관계로 저장할 수 있습니다 :'$ object-> save ($ related, $ relationship_key)'. 그래서 당신은'$ user-> save ($ role, "roles");을 사용할 필요가 있습니다.이 페이지의 하단을보십시오 : http://datamapper.wanwizard.eu/pages/save.html – swatkins

관련 문제