我正在尝试学习如何使用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()
谢谢,
标记
答案 0 :(得分:0)
$this->hasMany('TestSlave');
不是testslave
。否则Linux上就会出现问题。
请勿使用$this->addField('MastersID');
而是使用$this->hasOne('TestMaster');
$crud->setModel('TestMaster');
不是testmaster
。否则Linux上就会出现问题。
相反
$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”,并将包含相关模型的标题字段。