【问题标题】:CakePHP - Behaviours/Behaviors - Advice on creating custom behaviourCakePHP - 行为/行为 - 关于创建自定义行为的建议
【发布时间】:2014-04-08 11:36:09
【问题描述】:

我阅读了一些行为,并认为它可能适合我的简单要求,但我不知道如何开始创建自定义行为。

场景: 我有一个名为 Companiesmaster 表。此表与详细表 BusinessDescriptionsAddresses 具有“hasMany”关系。当然,这些明细表通过外键链接到 Companies 表。

尽管存在“hasMany”关系,这些明细表中只有一条记录可以在任何特定日期有效。因此,在 BusinessDescriptions 和 Addresses 的明细表中,我有字段“Startdate”和“Enddate”,告诉您记录的有效时间段。

使用示例:X 公司将从 01.01.2015 开始使用新地址。因此,在插入新地址时,其旧地址记录从 Startdate 01.01.2014 到 Enddate 31.12.9999,需要将其 Enddate 更改为 31.12.2014,以便为从 01.01.2015 开始的新记录让路。

所有这些对现有记录的开始/结束日期的“自动定界/调整”,我希望将其放入一个行为中,但是很难找到有关启动和运行自定义行为的教程。

谁能告诉我如何开始,或者向我展示为此创建行为的骨架结构?

【问题讨论】:

  • 我希望大多数逻辑能够检测重叠,将新记录与现有记录进行比较,以在模型行为代码中完成,而控制器可能会根据需要调用模型/行为函数,传递相关信息。但是是的,我真的不知道如何开始
  • 你从现有的(插件)行为中学到了很多东西,从简单的行为到更多的complicated ones。这应该让你开始学习如何在你的行为中写东西。

标签: cakephp model bdd behavior


【解决方案1】:

我认为不需要在这个上设置行为。行为适用于您需要跨多个模型使用逻辑时 - 在这种情况下,您似乎只需要在一个模型上使用它。

您可能只在您的Company 模型中使用beforeFind() 回调。在其中,您可以为要限制的日期附加条件。

如果你真的想做出某种行为,你可以把beforeFind() 合二为一,并在你希望所说的模型根据当前日期进行限制的任何时候使用它......等等。

顺便说一句,为什么不直接检索该公司的最新地址?按日期DESC排序,限1?

【讨论】:

    猜你喜欢
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    相关资源
    最近更新 更多