0

我有一个这样定义的名为 Task 的模型(与删除问题无关的字段)

  <?php
  class Model_Task extends Model_Table {
   public $entity_code='vscrum_task';
   public $table_alias='tk';

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

  // debug causes error in Ajax in ATK v4.1.1
  // $this->debug(true);
     $this->addField('id')->system(true)->visible(false); 
     $this->addField('task_desc')->mandatory(true)->visible(true);
     $this->addField('tasktype_id')->mandatory(true)->refModel('Model_TaskType');
     $this->addField('team_id')->system(true)->visible(false);

并且 refModel 任务类型是这样定义的(与删除问题无关的字段)

<?php
    class Model_TaskType extends Model_Table {
      public $entity_code='vscrum_tasktype';
      public $table_alias='ty';

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

         $this->addField('id')->mandatory(true);
         $this->addField('name')->mandatory(true);
         $this->addField('team_id');

        }   
     }

我有一个基于任务的 CRUD,现在(感谢 Jancha 和 Romans 在 stackoverflow 上的帮助)工作正常。

我想将 TaskType 下拉列表中的选项限制为仅为用户团队定义的那些任务类型。我尝试在引用我之前记住的会话变量的 TaskType 模型中添加一个 addCondition

  $this->addCondition('team_id',$p->api->recall('team_id'));

并且还使用直接调用登录使用的值

  $this->addCondition('team_id',$p->api->auth->get('team_id'));

但这会导致在网格中很好地显示任务类型

在此处输入图像描述

但在 Ajax 对话框中为 Edit 和 Add 保留它为空。

在此处输入图像描述

如果我从 TaskType 模型中删除 addCondition 行,它会显示列表中的所有值,但我总是希望将其限制为一个子集。

由于这是参考模型而不是 CRUD 所基于的模型,因此有什么建议可以让我按预期工作吗?

我尝试了 Roman 的建议,即拥有一个 TaskType 模型和一个从 TaskType_Team 扩展的新模型,其中 addCondition 像这样

类 Model_TaskType_Team 扩展 Model_TaskType { function init(){ parent::init();

    $this->addCondition('team_id',$p->api->auth->get('team_id'));
  }

为此,我需要创建一个名为 TaskType 的子目录 undel Model 否则它没有找到新模型,但最终结果是相同的。我认为这与我之前遇到的另一个问题相关对话框,但我不想使用 stickyGet 来解决此问题以确保安全(不希望能够修改 URL 以查看其他团队数据)和会话变量($p->auth->memorise 和 $p->auth->回想一下)在这种情况下似乎也不起作用 - 有什么进一步的建议吗?

4

1 回答 1

1

请记住,您可以像这样扩展您的模型。事实上,这在大型项目中经常使用。

class Model_TaskType_Team extends Model_TaskType {
    function init(){
        parent::init();
        $this->addCondition('team_id',$this->api->auth->get('team_id'));
    }
}
于 2011-09-23T08:36:54.333 回答