2009-09-24 4 views
1

ZF 프로젝트에 활성 레코드 패턴을 구현하려고합니다. 이전에 비슷한 승인을 받았지만 잘 작동합니다.ActiveRecord와 다 대다 관계?

하지만 지금 내 문제는 내 모델과 다 대 다 관계를 처리하는 방법에 관한 것입니다.

다음은 예입니다.

사용자 모델이 있다고 가정 해 봅니다.

<?php 
require_once 'MLO/Model/Model.php'; 

class Model_User extends MLO_Model_Model 
{ 
    protected $_data = array(
     'id' => NULL, 
     'email' => NULL, 
     'password' => NULL, 
    ); 
} 

없음 문제.

하지만 그룹 모델을 추가하면 어떻게됩니까?

require_once 'MLO/Model/Model.php'; 

class Model_Group extends MLO_Model_Model 
{ 
    protected $_data = array(
     'id' => NULL, 
     'name' => NULL, 
     'desc' => NULL, 
    ); 
} 

require_once 'MLO/Model/Collection.php'; 

class Model_Groups extends MLO_Model_Collection 
{ 
    protected $_modelClass = 'Model_Group'; 
} 

는 그때 그 반대의 경우도 마찬가지 객체를 모델링하기 위해 DB에서 결과를 변환 매퍼하고 있습니다.

제 질문은 내 모델과 다 대 다 관계를 처리하는 방법입니다.

어디에서 "관계를 저장해야합니까?"

array(3) { 
    [0]=> 
    array(3) { 
    ["id"]=> 
    string(1) "9" 
    ["name"]=> 
    string(1) "Guest" 
    ["desc"]=> 
    string(1) "Some desc" 
    } 
    [1]=> 
    array(3) { 
    ["id"]=> 
    string(1) "64" 
    ["name"]=> 
    string(1) "Moderator" 
    ["desc"]=> 
    string(1) "Some desc" 
    } 
    [2]=> 
    array(3) { 
    ["id"]=> 
    string(1) "5" 
    ["name"]=> 
    string(1) "Admin" 
    ["desc"]=> 
    string(1) "Some desc" 
    } 
} 

또 다른 아이디어 : 그룹은 같은 배열 될 것 같은 접근 방식으로

class Model_User extends MLO_Model_Model 
{ 
    protected $_data = array(
     'id' => NULL, 
     'name' => NULL, 
     'desc' => NULL, 
     'groups' => NULL, // where groups will be an instance of the Model_Groups 
    ); 
} 

: 여기

내가 생각 몇 가지 단서입니까?

P .: ACL이나 비슷한 것을 처리하려고하지 않습니다. 단지 예입니다.

답변

0

의 태그를 게시하는 문제를 번역하자 - 하나 개의 게시물을 여러 태그가 하나 개의 태그가 많은 게시물과 함께 사용 -이 (적어도 나에게) 쉽게 이해할 수 :

나는 페이지의에 [ '태그'] 추가합니다 $ _data를 추천합니다. 그리고 그것은 배열 된 태그 객체의 배열이 될 것입니다. Tagicality for Tag [[pages]]에 페이지를 추가했습니다. 그러나 나는 그 과정을 위해 게으른 로딩을 사용할 것입니다.

+0

을 지원하지 않는 경우 당신을 위해 물건을 삭제할 수 있습니다 따라서 Pages와 Tags (또는 예제에서는 Users and Groups)에 Tags와 Pages를 할당하고 배열의 클래스 Name을 Tag/Page 객체를 지연로드하도록 전달합니까? 태그/페이지 객체가 포함 된 컬렉션 객체의 사용에있어 문제점이 있습니까? –

+0

물론 당신은 Collection을 사용할 수 있습니다 ... :) 꽤 똑같습니다 - 저는이 방법으로, sry ... 그렇게하는 데 익숙합니다. 문제는 무한 루프에 도달 할 수 있습니다. , 그들은로드되고 각 태그에는 페이지,로드 페이지 ...)가 있기 때문에 게으른로드가 필요한 이유입니다. 또한 꽤 데이터베이스 집약적 인 얻을 수있는 결과를 저장할 캐시 일종의 사용하는 것이 좋습니다 :) –

1

Zend_Db_Table에는이 기능이 내장되어 있습니다! :)

이 테이블 관계를 관리 할 수있는 "dependentTables"와 "referenceMap"의 자신의 개념을 사용하고 심지어 CASCADE을하고 DB는 참조 제한 조건

Zend_Db_Table Relationships