CakePHP模型关联基于字段值?

时间:2013-02-24 07:23:27

标签: cakephp model

我有三张桌子(实际上还有几张桌子,但我只需要三张桌子来解决这个问题)。应用程序,Appattrs和Appcats。在CakePHP的说法中(尽我所能,因为我还在学习框架)应用程序hasMany Appattrs和Appattrs属于应用程序。容易。

当我想关联Appattrs和Appcat时,问题出现了 - 关联是基于字段值和Appattrs中相应的外键。例如:

如果appattrs.type ='appcatid',则appattrs.value将指向Appcat表中的记录。

appattrs表包含静态数据appattrs.type ='dateadded'和value ='201201011300'以及外键引用。我宁愿不讨论为什么数据以这种方式存储,我只是想弄清楚如何创建关联,让我拉一个应用程序记录,关联的attr记录,然后是一个带有相关行的attr记录从适当的表格。动态。

在我看来,我应该能够基于查询创建模型,然后将该模型关联起来 - 我似乎无法弄清楚如何做到这一点。

-

如果我需要发布三个表的模式,我可以。我也可以发布我当前的模型代码,但老实说,现在它只是关联变量,所以我认为它不会让任何人在任何地方。

1 个答案:

答案 0 :(得分:1)

我不明白这个设计背后的逻辑,我认为你在寻找什么 是Creating and Destroying associations on the fly

在CakePHP Docs的这一部分中,它描述了如何在相应的控制器中关联模型。

因此,例如,当您要将特定数据保存到Appattr模型时,您可以执行一些数据检查并使用bind()方法创建关联。

上面的一个非常抽象的方法就是这样的

public function yourmethod() {
     ...
     if ($this->request->data['Appattr']['type'] == 'sometype') {
         $this->Appattr->bindModel(
                array(/*Your association*/ => array(/* Your attributes...*/)
         );
         /* Rest of the logic follows */
     }
 }

通过这种方式,您可以完成工作,但最终可能会变得非常复杂 数据库中的数据,因此代码非常复杂。

我希望这会有所帮助