cakephp在saveAll之前/期间删除“NULL”和“0”

时间:2009-08-12 07:11:41

标签: cakephp

我有一个包含大量“库存”商品的表单,我的数据如下所示:

$this->data['Inventory'][#]['description']
$this->data['Inventory'][#]['quantity']
$this->data['Inventory'][#]['category_id']

问题是如果quatity为0或NULL,我不知道如何取消设置$ this-> data ['Inventory'] [#]。我可以使用单个记录轻松完成此操作,但是如上所述使用多个记录进行此操作的最简单方法是什么?

我的直觉告诉我在beforeSave()中循环遍历$ this->数据并取消设置任意键和数组值为0或NULL为关键'数量',是否有更好的方法?

3 个答案:

答案 0 :(得分:3)

CakePHP的核心extract类的Set方法允许您快速过滤数据,而无需遍历多维数组或遍历树结构。

public function beforeSave($data) {
    // select only the Inventories with a quantity greater than zero
    $this->data = Set::extract('/Inventory[quantity>0]', $this->data);
    // continue with save
    return true;
}

beforeSave过滤器听起来像是这个逻辑的正确位置。

答案 1 :(得分:0)

这应该这样做:

$this->data = array_filter($this->data);
编辑:哎呀,抱歉这不能解决你的问题。我认为你是对的,我可能会遍历数组并检查数量的值。

答案 2 :(得分:0)

我前段时间写了一篇Nullable行为,这可能只是你想做的事情。它可以在Github(http://github.com/robwilkerson/scratchpad/tree/196e8e8bdbf042f7051f29b077a34ae9265e0983/cakephp/behaviors)上找到。它并不像我希望的那样为公众消费而打磨,但它的功能性。我正在生产的几个项目中使用它。