openbuildings / jam-freezable
使用 Jam 在数据库中冻结动态计算值
0.1.3
2014-03-01 10:15 UTC
Requires
- php: >=5.3.0
- composer/installers: *
- openbuildings/jam: 0.4.*
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-21 21:42:52 UTC
README
Freezable 是一个用于在数据库中冻结动态计算值的 Jam ORM 行为。
通常在模型中会有一个方法来计算并返回一个值。这可能是一个价格、时间或其他任何东西。计算可能是复杂的或时间敏感的(基于时间、货币汇率等)。然后你需要将这个值保存在数据库列中(即 冻结),然后在将来直接从字段而不是方法中读取这个值。
Freezable 行为允许你轻松地做到这一点。`freeze()`、`unfreeze()` 和 `is_frozen()` 方法为你提供了便利,以便在需要时轻松地获取动态计算值或冻结值。
用法
它有3个参数:`associations`、`parent` 和 `fields`
class Some_Model extends Jam_Model { public static function initialize(Jam_Meta $meta) { $meta ->behaviors(array( 'freezable' => Jam::behavior('freezable', array( 'fields' => 'price', 'parent' => 'some_parent_model', 'associations' => array('some_child', 'some_children'), )), )); } //... }
这意味着每当模型被 冻结 时,名为 `price` 的字段将被分配给 `price()` 方法的值。所有的关联也将被 冻结。为了使这正常工作,关联本身必须也是 可冻结的(具有附加的 Freezable 行为)。`price()` 方法以及任何其他字段都必须考虑到字段的值。例如。
public function price() { return $this->price ? $this->price : $this->compute_price(); }
父关联用于找到 `is_frozen` 的值,以确保只有一个模型持有标志的值。因此,如果你在具有 父 的 可冻结 上调用 `is_frozen()`,它将从父那里获取那个值。
详细信息
待办事项:添加关于验证的说明 TODO:添加更多示例
许可证
版权(c)2013 OpenBuildings,Inc. 由 Ivan Kerin 在 clippings.com 的一部分开发。
在 BSD-3-Clause 许可证下,阅读 LICENSE 文件。