【问题标题】:CakePHP model association based on field values?基于字段值的CakePHP模型关联?
【发布时间】:2013-08-13 00:35:23
【问题描述】:

我有三个表(实际上还有几个,但我只需要三个来解决这个问题)。应用程序、Appattrs 和 Appcats。用 CakePHP 的说法(尽我所能,因为我还在学习框架)应用程序有许多应用程序,并且应用程序属于应用程序。很简单。

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

如果 appattrs.type = 'appcatid' 那么 appattrs.value 将指向 Appcat 表中的一条记录。

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

在我看来,我应该能够根据查询创建一个模型,然后关联该模型 - 我似乎不知道该怎么做。

--

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

【问题讨论】:

    标签: cakephp model


    【解决方案1】:

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

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

    因此,例如,当您要将特定数据保存到 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 */
         }
     }
    

    这样你就可以完成工作,但很可能最终会变得非常复杂 数据库中的数据,因此代码非常复杂。

    希望对你有帮助

    【讨论】:

    • 经过一番挣扎后,我最终决定使用 bindModel 即时创建关联 - 尽管您的回答没有明确回答我的问题,但它让我朝着正确的方向前进。
    猜你喜欢
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多