0

我目前正在做一个复杂的多级分类系统。

为简化起见,我将通过提供理论示例来解释我要完成的工作:

我有一个小组表:

group id| group name
   1    |     A
   2    |     B
   3    |     C

我有一个子组表:

subgroup id| group id| sub-group name
    1      |    1    | A-aaaa
    2      |    1    | A-bbbb
    3      |    1    | A-cccc
    4      |    2    | B-111111
    5      |    2    | B-222222
    6      |    3    | C-ONE
    7      |    3    | C-TWO

我有一个使用这两个表作为参考的模型:

class Model_ItemGrouping extends Model_Table {
   public $entity_code = 'items';

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

      $this->addField('itemname')->caption('Item Description');

      $this->addField('group_id')->caption('Group Name')
         ->refModel('Model_Groups')->displayField('groupname');

      $this->addField('subgroup_id')->caption('Sub Group Name')
         ->refModel('Model_SubGroups')->displayField('subgroupname');
   }
}

现在,我将此模型应用于我的代码中的表单,如下所示:

$form = $this->add('MVCForm');
$form->addSubmit();

$model=$form->setModel('ItemGrouping');

if($model->isInstanceLoaded())
   $form->getModel()->loadData(55); // force it to load item id #55

加载并显示此表单后,用户现在可以编辑并能够为该项目选择不同的组和/或不同的子组。

但我想做的是限制可以根据项目的当前状态从下拉列表中选择的选项集。

如果项目 id #55 当前来自第 3 组,则该组应锁定到第 3 组,并且子组下拉列表应仅包含第 3 组的子组,而不是整个列表。

现在,更详细和具体的问题是:

有没有办法根据项目的状态动态锁定两个引用模型:

Model_Groups领域参考group_id

Model_SubGroups领域参考subgroup_id

$model仅使用表单实例及其在PHPaddCondition中的相应方法而不是前端 JavaScript的一组特定选定项?

我想象这样的事情(修改我之前的片段):

$form = $this->add('MVCForm');
$form->addSubmit();

$model=$form->setModel('ItemGrouping');

if($model->isInstanceLoaded()) {
   $form->getModel()->loadData(55); // force it to load item id #55

   // if item is of group #2, force references to show options for group #2
   $model->getFieldRefModel('group_id')->addCondition('id=',2);
   $model->getFieldRefModel('subgroup_id')->addCondition('group_id=',2);
}

注意:这getFieldRefModel是不存在的,这当然是为了提供使用静态值的概述而过度简化,而我还需要动态传递项目 ID 号并在我实际设置之前首先检查项目的当前分组状态过滤条件。

4

1 回答 1

2

如果我正确理解了您的要求,那么

$model->getFieldRefModel('group_id')->addCondition('id=',2);
$model->getFieldRefModel('subgroup_id')->addCondition('group_id=',2);

你可以写

$model->ref('group_id')->addCondition('id',2);
$model->ref('subgroup_id')->addCondition('group_id',2);

那是最新的 ATK4 版本,我猜你没有使用 :(

其实这些条件都是在后台自动添加的,所以你可以简单的写

$model->ref('group_id');
$model->ref('subgroup_id');

并且不要忘记在您的模型初始化方法中使用 hasOne、hasMany 来定义这些字段。现在这些字段不是“关系”,因此当您没有使用 hasOne/hasMany 定义字段时,ref() 将不起作用。

此外,我相信您的数据结构存在缺陷。您在 Item 和 SubGroup 之间有什么样的关系(1:n 或 n:1)?

于 2013-04-15T23:32:04.930 回答