我有一个包含大量“库存”商品的表单,我的数据如下所示:
$this->data['Inventory'][#]['description']
$this->data['Inventory'][#]['quantity']
$this->data['Inventory'][#]['category_id']
问题是如果quatity为0或NULL,我不知道如何取消设置$ this-> data ['Inventory'] [#]。我可以使用单个记录轻松完成此操作,但是如上所述使用多个记录进行此操作的最简单方法是什么?
我的直觉告诉我在beforeSave()中循环遍历$ this->数据并取消设置任意键和数组值为0或NULL为关键'数量',是否有更好的方法?
答案 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)上找到。它并不像我希望的那样为公众消费而打磨,但它的功能性。我正在生产的几个项目中使用它。