【问题标题】:MVCGrid w/Expander (parent) invoking an MVC Form(child) and loading child record - UPDATEDMVCGrid w/Expander(父)调用 MVC 表单(子)并加载子记录 - 更新
【发布时间】:2012-02-05 05:09:40
【问题描述】:

我的多级 MVCGrid/MVCForm/MVCGrid 传奇继续......

我正在使用带有扩展按钮的嵌套 MVCGrids,这些按钮调用 MVCForms 来执行不同的数据操作。此过程中的所有 mySQL 表都有一个“id”数据元素,它是每个表的主键。每个 mySQL 表在必要时也使用 _id 命名约定指向其父表。所有外键都已在 mySQL 中设置为以这种方式工作。

父母的模型是这样的:

类 Model_uidcontrol 扩展 Model_Table {

public $entity_code='uidcontrol';
public $table_alias='uc';

function init(){
    parent::init();

孩子的模型是这样的:

类 Model_uiddetails 扩展 Model_Table {

public $entity_code='uiddetails';
public $table_alias='ud';
function init(){
    parent::init();

每个模型都有自己的“id”和指向其父级的指针。

MVCGrid(父)中的扩展列调用这个子函数:

$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'

在上面的示例中,有一个父记录“uidcontrol”具有该 id。我将子记录的“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) 字符串'10'(长度=2)

我写这个:

$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。因此,查询不会返回记录。

【问题讨论】:

    标签: atk4


    【解决方案1】:

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

    【讨论】:

    • 我理解您写的内容,但我遇到的问题是“addCondition”附加到限定符:$um->setModel('uiddetails') ->addCondition('uidcontrol_id',($ _GET['uidcontrol_id'])) ->loadData(($_GET['uidcontrol_id']));
    • 您根本不需要使用loadData!条件是标识子记录的条件。
    • 经过大量工作后,MVCForm 似乎无论如何都会使用“id”字段作为条件。 "setMasterField" 附加到现有条件而不是替换它。
    猜你喜欢
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2010-11-09
    • 1970-01-01
    相关资源
    最近更新 更多