2014-11-25 63 views
0

我一直在为这个问题奋斗了几天,最后在本网站上寻求专家和观众的意见。设计最佳实践 - 模型vs控制器与UI - CakePHP,MySQL

  1. 我有两个表 - 一个是工作流步骤一个模板,另一个是这些所谓的事件工作流程步骤的实例。模板表包含步骤名称,步骤类型等信息 - 非常通用的信息。事件表包含回到工作流步骤表的一个引用链接和一个名为notes的附加列 - 它存储用户在登录特定工作流程步骤时登录的数据。工作流程步骤和事件都链接到网站上的POST

  2. 工作流程步骤模板可以存在,但尚未发生事件 - 即用户可能仍处于步骤3或步骤5,并且未记录步骤1的事件,2,4 - 基本上步骤的顺序只是暗示性的,但不具有约束力。工作流程步骤中有一个序列字段,指示它们应该在屏幕上显示的顺序。

  3. 事件也可能在没有工作流程步骤的情况下发生 - 换句话说,用户可以在工作流程步骤的上下文之外记录注释。这些是通用事件,并直接与POST相关联

  4. 我能够成功检索给定POST的这两个值 - 它们被检索为两个单独的数组。我正在使用CakePHP和MySQL

  5. UI需要呈现一个屏幕,以便按顺序显示所有工作流程步骤以及与这些步骤相关或与这些步骤相关的相应事件。屏幕的顺序将主要通过工作流步骤的顺序,其次由CREATED_DATE对于那些不与特定的工作流程步骤相关的事件来驱动

问题陈述 - 1.我送两个独立阵列(如#4所示),并让UI确定如何交互显示步骤和事件的复杂逻辑? 2.我是否在控制器中处理步骤和事件的交织,然后向UI发送一个可以循环显示的简单数组? 3.我试图将这个逻辑移动到数据库,但由于#2和#3中的变化,它变得相当复杂

我在寻求建议,哪一个从设计实践以及从简化的观点。我知道我在这里给出的图片有限,但希望本网站上的某个人可能在其他地方遇到过类似的问题。

回答

0

行 - 我已经解决了这一点。我最终将功能移到了模型上。

  1. 我创建了两个SQL查询 - 一个检索所有工作流步骤以及可能与其中每个相关联的任何事件信息。
  2. 然后,我创建了一个检索所有那些独立的,不与任何特定的工作流步骤
  3. 我使用UNION ALL堆栈他们彼此
  4. 我用一种顶部相关联的事件第二个SQL修改日期和序号,以便所有的步骤和事件按时间顺序和顺序出现

然后,我将此从模型传递到视图(通过控制器),并让视图迭代并显示元素。这种方法实际上极大地简化了我的View和Controller代码,甚至Model代码也非常简单,因为它全部是一个带参数的查询语句。

0

根据你给用户分配事件的方式,我会在Event to Workflow中建立一个hasOne关系。您需要为您的用户提供另一种关系,hasOne或hasMany。

$hasOne = 'Workflow'; 

很明显,这意味着您的Event表会有一个名为wordflow_id的列,并且会与工作流中的单个行相关联。在控制器中,我会用用户来调用事件。

$this->Event->findAllByUserId($user_id); 

这应该为您提供一个可能看起来像这样的数组。

array(
    [0] => array(
     [Event] => array(
      'id' => 1, 
      'name' => 'blah', 
      ... 
     ), 
     [User] => array(
      'id' => 1, 
      'name' => 'Charles', 
      ... 
     ), 
     [Workflow] => array(
      [0] => array(
       'id' => 1, 
       'name' => 'more blagblagblag', 
       ... 
      ), 
      [1] => array(
       'id' => 9, 
       'name' => 'sblagblsagblag', 
       ... 
      ), 
      [2] => array(
       'id' => 42, 
       'name' => 'mordse d', 
       ... 
      ) 
     ) 
    ) 
) 

呼叫你所有的工作流模板

$this->Workflow->find('all'); 

那我就用户蛋糕的内置SET ::功能打印工作流模板在您的视图,并使用你的事件调用以填充数据。

请发布更多详细信息和您的代码,模型等,我相信我们可以为您提供实现此目的所需的确切查询/逻辑。

http://book.cakephp.org/2.0/en/core-utility-libraries/set.html

+0

我想你误解了我的问题。我可以根据需要使用'find'方法检索所有数据。然而,我的问题是围绕设计考虑 - 即嵌入处理功能 - 控制器或视图 - 尽管找到了答案 - 谢谢 – ChicagoSky 2014-11-27 05:39:11