如何在Fat Free Framework中重置数据映射器的虚拟字段?

时间:2016-10-26 10:12:19

标签: php fat-free-framework

让我们从FFF user guide给出的示例开始。有一个数据库表:

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';

假设我已经执行了一些查询,并使用了这个虚拟字段。

现在我想删除这个虚拟字段,因为我不需要它用于进一步的请求,我不想用无用的计算重载数据库。有可能吗?

1 个答案:

答案 0 :(得分:2)

要求是移除'属性'来自一个'对象实例'

标准方式'那个'模特'在大多数PHP'框架中实现,' orm'它实现它们,以便可以使用'数组语法来访问它们。

另一种方法是实现一些magic methods,例如__unset

即。当你拨打unset($item->property);时,会运行代码以正确维护它。

要真正灵活,请在基本模型中实施这两种方法'

这是FFF所做的。

请参阅:类:lib/magic.phplib/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);
}