如何在 Fat Free Framework 中重置数据映射器的虚拟字段?
How to reset data mapper's virtual fields in Fat Free Framework?
让我们从 FFF user guide 上给出的例子开始。有一个数据库 table:
CREATE TABLE products (
productID VARCHAR(30),
description VARCHAR(255),
supplierID VARCHAR(30),
unitprice DECIMAL(10,2),
quantity INT,
PRIMARY KEY(productID)
);
我有一个带有虚拟字段的数据映射器:
$item=new DB\SQL\Mapper($db,'products');
$item->totalprice='unitprice*quantity';
假设我执行了一些查询并使用了这个虚拟字段。
现在我想删除这个虚拟字段,因为我不需要它来处理更多请求,而且我不想用无用的计算使数据库超载。可能吗?
要求是从 'object instance' 中删除 'property'。
'models' 的 'standard way' 在大多数 PHP 'framework', 'orm' 等中实现了它来实现它们,以便可以使用'array syntax'。
另一种方法是实现一些magic methods
,例如__unset。
即当您调用 unset($item->property);
时,代码是 运行 正确维护它。
要真正灵活,请在 'base models'
中实施这两种方法
这就是 FFF
所做的。
请参阅:类:lib/magic.php
和 lib/base.php
以了解其完成方式的所有详细信息。
摘自 magic.php...
的来源
/**
* Alias for offsetunset()
* @return NULL
* @param $key string
**/
function __unset($key) {
$this->offsetunset($key);
}
/**
* Convenience method for removing property value
* @return NULL
* @param $key string
**/
function offsetunset($key) {
if (Base::instance()->visible($this,$key))
unset($this->$key);
else
$this->clear($key);
}
让我们从 FFF user guide 上给出的例子开始。有一个数据库 table:
CREATE TABLE products (
productID VARCHAR(30),
description VARCHAR(255),
supplierID VARCHAR(30),
unitprice DECIMAL(10,2),
quantity INT,
PRIMARY KEY(productID)
);
我有一个带有虚拟字段的数据映射器:
$item=new DB\SQL\Mapper($db,'products');
$item->totalprice='unitprice*quantity';
假设我执行了一些查询并使用了这个虚拟字段。
现在我想删除这个虚拟字段,因为我不需要它来处理更多请求,而且我不想用无用的计算使数据库超载。可能吗?
要求是从 'object instance' 中删除 'property'。
'models' 的 'standard way' 在大多数 PHP 'framework', 'orm' 等中实现了它来实现它们,以便可以使用'array syntax'。
另一种方法是实现一些magic methods
,例如__unset。
即当您调用 unset($item->property);
时,代码是 运行 正确维护它。
要真正灵活,请在 'base models'
中实施这两种方法这就是 FFF
所做的。
请参阅:类:lib/magic.php
和 lib/base.php
以了解其完成方式的所有详细信息。
摘自 magic.php...
的来源/**
* Alias for offsetunset()
* @return NULL
* @param $key string
**/
function __unset($key) {
$this->offsetunset($key);
}
/**
* Convenience method for removing property value
* @return NULL
* @param $key string
**/
function offsetunset($key) {
if (Base::instance()->visible($this,$key))
unset($this->$key);
else
$this->clear($key);
}