我有三张桌子(实际上还有几张桌子,但我只需要三张桌子来解决这个问题)。应用程序,Appattrs和Appcats。在CakePHP的说法中(尽我所能,因为我还在学习框架)应用程序hasMany Appattrs和Appattrs属于应用程序。容易。
当我想关联Appattrs和Appcat时,问题出现了 - 关联是基于字段值和Appattrs中相应的外键。例如:
如果appattrs.type ='appcatid',则appattrs.value将指向Appcat表中的记录。
appattrs表包含静态数据appattrs.type ='dateadded'和value ='201201011300'以及外键引用。我宁愿不讨论为什么数据以这种方式存储,我只是想弄清楚如何创建关联,让我拉一个应用程序记录,关联的attr记录,然后是一个带有相关行的attr记录从适当的表格。动态。
在我看来,我应该能够基于查询创建模型,然后将该模型关联起来 - 我似乎无法弄清楚如何做到这一点。
-
如果我需要发布三个表的模式,我可以。我也可以发布我当前的模型代码,但老实说,现在它只是关联变量,所以我认为它不会让任何人在任何地方。
答案 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 */
}
}
通过这种方式,您可以完成工作,但最终可能会变得非常复杂 数据库中的数据,因此代码非常复杂。
我希望这会有所帮助