2013-11-27 3 views
0

addRef 사용법을 배우려고합니다.CRUD와 함께 addRef를 사용합니다.

나는 addRef에게 어떤 필드가 Master의 'id'와 연결되어야 하는지를 말해야한다고 생각한다.

<?php 
class Model_TestMaster extends Model_Table { 
    public $table='testmaster'; 
     function init(){ 
      parent::init(); 

     $this->addField('Description'); 
     $this->hasMany('testslave'); 
     } 
} 

과 '노예'테이블 : 다음

<?php 
class Model_TestSlave extends Model_Table { 
    public $table='testslave'; 
     function init(){ 
      parent::init(); 

     $this->addField('MastersID'); 
     $this->addField('SubDescription'); 
     } 
} 

와 나는이 같은 '페이지'설정 : 테스트하려면

, 나는 '마스터'테이블이

<?php 
class page_test extends Page { 
function init(){ 
    parent::init(); 

$page=$this; 
$tabs = $this->add('Tabs'); 

$crud = $tabs->addTab('Master')->add('CRUD'); 
$crud->setModel('testmaster'); 

if (! $crud->isEditing()) { 
     // add subCRUD 
     $sub_crud = $crud->addRef('testslave', array(
      'extra_fields' => array('MastersID','SubDescription'))); 
} 
} 

나는 addRef에게 어떤 필드가 Master의 'id'와 연결되어야하는지 알려줄 필요가 있다고 생각 하는가?

이 확인 표시,하지만 난 노예를 확장하기 위해 버튼을 누를 때 나는 수 : 0

추가 정보 :

응용 프로그램 오류 :

BaseException, 코드를 찾을 수없는 자식 요소를

Raised by object: Object Model_TestSlave(51cf4a73__ter_testslave_model_testslave) 
element: testmaster_id 
: 

Stack trace: 
File  Object Name Stack Trace 
C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb\atk4\lib/BaseException.php :63  BaseException BaseException->collectBasicData(Null) 
C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb\atk4\lib/AbstractObject.php :545 BaseException BaseException->__construct("Child element not found", Null) 
/ : 51cf4a73__ter_testslave_model_testslave Model_TestSlave->exception("Child element not found") 
C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb\atk4\lib\SQL/Model.php :107  Loggercall_user_func_array(Array(2), Array(1)) 
C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb\atk4\lib/AbstractObject.php :331 51cf4a73__ter_testslave_model_testslave Model_TestSlave->exception("Child element not found") 
C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb\atk4\lib\SQL/Model.php :275 51cf4a73__ter_testslave_model_testslave Model_TestSlave->getElement("testmaster_id") 
C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb\atk4\lib\SQL/Many.php :79  51cf4a73__ter_testslave_model_testslave Model_TestSlave->addCondition("testmaster_id", "0000000001") 
C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb\atk4\lib\SQL/Model.php :248 51cf4a73__ter_testslave SQL_Many->ref(Null) 
C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb\atk4\lib\View/CRUD.php :316 asol_Test_tabs_view_htmlelement_crud_model_testmaster Model_TestMaster->ref("testslave") 
C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb\page/test.php :15  asol_Test_tabs_view_htmlelement_crud CRUD->addRef("testslave", Array(1)) 
C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb\atk4\lib/AbstractObject.php :306 asol_Test page_test->init() 
C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb\atk4\lib/ApiFrontend.php :130 asol Admin->add("page_Test", "Test", "Content") 
C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb\atk4\lib/ApiWeb.php :428 asol Admin->layout_Content() 
C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb\atk4\lib/ApiFrontend.php :39  asol Admin->addLayout("Content") 
C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb\atk4\lib/ApiWeb.php :275 asol Admin->initLayout() 
C:\Program Files (x86)\EasyPHP-DevServer-13.1VC11\data\localweb/index.php :15  asol Admin->main() 

, 당신을 감사

마크

답변

0
  1. $this->hasMany('TestSlave');이 아닌 testslave이되어야합니다. 그렇지 않으면 리눅스에 문제가있을 것입니다.

  2. 대신 $this->hasOne('TestMaster');

  3. $crud->setModel('TestMaster');하지 testmaster이어야한다 사용 $this->addField('MastersID');을 사용하지 마십시오. 그렇지 않으면 리눅스에 문제가있을 것입니다.

    $sub_crud = $crud->addRef('TestSlave', array( 'extra_fields' => array('testmaster_id','SubDescription')));

  4. 대신

$sub_crud = $crud->addRef('testslave', array( 'extra_fields' => array('MastersID','SubDescription')));

사용은 또한 당신은 extra_fields에 필드 "testmaster"를 사용할 수 있습니다. TestMaster 모델의 제목 필드가됩니다.

여기서 아이디어는 모델에 hasOne ('ModelName')을 넣으면 모델에 2 개의 필드가 만들어집니다. 첫 번째 모델은 "modelname_id"라는 이름을 가지며 관련 모델의 ID로 구성됩니다. Second는 "modelname"이라는 이름을 가지며 관련 모델의 title 필드로 구성됩니다.

+0

완벽하게 작동합니다! 고맙습니다. – Mark

+0

당신을 진심으로 환영합니다! hasMany와 hasOne을 관련 모델에 사용하는 것이 거의 항상 좋습니다. 두 가지가 모두있는 경우이 관계를 사용하여 앞뒤로 탐색 할 수 있습니다. 그렇지 않으면 한 방향으로 만 탐색 할 수 있으며 문제를 해결할 수도 있습니다. 더 나은 항상 둘 다 사용하면 괜찮을거야 :) – DarkSide

관련 문제