MVCGrid w / Expander(父)调用MVC表单(子)并加载子记录 - 更新

时间:2012-02-05 05:09:40

标签: atk4

我的多级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.因此,查询不会返回记录。

1 个答案:

答案 0 :(得分:0)

loadData方法仅按其ID加载记录。要通过引用记录链接“子”模型,您必须使用setMasterFieldaddCondition来指示模型过滤关系。