我的多级MVCGrid / MVCForm / MVCGrid传奇继续......
我使用嵌套的MVCGrids和扩展器按钮来调用MVCForms来执行不同的数据操作。此进程中的所有mySQL表都有一个“id”数据元素,这是每个表的主键。每个mySQL表在必要时都使用_id命名约定指向其父级。所有的外键都已经在mySQL中设置,以便以这种方式工作。
父母的模型是这样的:
class Model_uidcontrol扩展了Model_Table {
public $entity_code='uidcontrol';
public $table_alias='uc';
function init(){
parent::init();
孩子的模型是这样的:
class Model_uiddetails扩展了Model_Table {
public $entity_code='uiddetails';
public $table_alias='ud';
function init(){
parent::init();
每个模型都有自己的“id”和指向其父级的指针。
MVCGrid(parent)中的expandder列调用此子函数:
$um=$this->add('MVCForm');
$um->setModel('uiddetails')
->loadData(($_GET['uidcontrol_id']));
我在儿童模特中试过这个:
$this->addRelatedEntity('uc','uidcontrol','uidcontrol_ID');
这也是:
$this->addField('uidcontrol_id')
->refModel('Model_uidcontrol')
->caption('System Info')
->visible(true);
我已经分别尝试了每种技术,并将子记录与正确的父母进行协调。
debug()显示了这个
,其中
ud.id = '121'
ud.uidcontrol_id = '121'
好的,我理解$ GET及其工作原理以及它与dsql的关系 - 至少我认为我这样做了。
我无法弄清楚如何告诉MVCForm使用“ud.uidcontrol_id ='121”来 在构建用于数据加载的dsql时,通过$ GET而不是使用'ud.id'
在上面的例子中,有一个带有该id的父记录“uidcontrol”。我强迫子记录的'id'为121,看它是否会提取数据并在表单中显示。好的,数据显示应该。
当我尝试'id'= 10的父级时,debug()产生这个
ud.id = '10'
ud.uidcontrol_id = '10'
并且不返回任何数据。有一个id = 10的uidcontrol记录,但dsql也试图匹配到ud.id = 10。
如果有帮助,我可以发布更多我正在努力澄清我想要做的事情。
理想情况下,我想告诉MVCForm“嘿!在构建dsql时不要使用'id'数据元素,而是使用我提供的那个。问题是,我无法弄清楚如何做到这一点......但是我一路上学到了很多东西。我认为我可能会“过度思考”这里的东西。
感谢您的任何建议!
2月6日星期一注:
的var_dump($ _ GET);表示:
'id'=>字符串'10'(长度= 2)< === uidcontrol.id 'uidcontrol_id'=>字符串'10'(长度= 2)< === uidcontrol.id
我写这个:
$um->setModel('uiddetails')
->addCondition('uidcontrol_id',($_GET['id']))
->loadData(($_GET['id']));
SQL调试显示正在构建:
,其中
ud.id = '10'
ud.uidcontrol_id = '10'
问题是我只想“ud.uidcontrol_id ='10'”。表uiddetails有自己的id为125,uidcontrol_id值为10.因此,查询不会返回记录。
答案 0 :(得分:0)
loadData
方法仅按其ID加载记录。要通过引用记录链接“子”模型,您必须使用setMasterField
或addCondition
来指示模型过滤关系。