openbuildings/jam-freezable

使用 Jam 在数据库中冻结动态计算值

安装次数: 3,038

依赖关系: 0

建议者: 1

安全: 0

星标: 0

关注者: 15

分支: 0

开放问题: 0

类型:kohana-module

0.1.3 2014-03-01 10:15 UTC

This package is auto-updated.

Last update: 2024-09-21 21:42:52 UTC


README

Build Status Scrutinizer Quality Score Code Coverage Latest Stable Version

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 文件。