使用带有CRUD的addRef

时间:2013-11-27 02:29:16

标签: crud atk4

我正在尝试学习如何使用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');
       }
}

然后我像这样设置'page':

<?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'链接?

显示确定,但是当我按下按钮展开奴隶时,我得到:

应用程序错误:找不到子元素

BaseException,代码:0

其他信息:

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()

谢谢,

标记

1 个答案:

答案 0 :(得分:0)

  1. $this->hasMany('TestSlave');不是testslave。否则Linux上就会出现问题。

  2. 请勿使用$this->addField('MastersID');而是使用$this->hasOne('TestMaster');

  3. $crud->setModel('TestMaster');不是testmaster。否则Linux上就会出现问题。

  4. 相反

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

    使用

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

    此外,您可以在extra_fields中使用字段“testmaster”。那将是TestMaster模型的标题领域。

    这里的想法是,当你在模型中放入hasOne('ModelName')时,会在模型中创建2个字段。 第一个将具有名称“modelname_id”,并且将包含相关模型的ID。 第二个将具有名称“modelname”,并将包含相关模型的标题字段。