cakephp удалить NULL и 0 до/во время saveAll

У меня есть форма с множеством элементов «инвентаря», мои данные выглядят так:

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

дело в том, что я не знаю, как сбросить $this->data['Inventory'][#], если качество равно 0 или NULL. Я могу легко сделать это с одной записью, но как проще всего сделать это с несколькими записями, как указано выше?

мой инстинкт подсказывает мне пройти через $this->data в beforeSave() и отменить любой ключ с и значением массива со значением 0 или NULL для ключа «количество», есть ли лучший способ?


person brndnmg    schedule 12.08.2009    source источник


Ответы (3)


Метод extract ядра CakePHP 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 кажется правильным местом для этой логики.

person deizel    schedule 13.08.2009

Это должно сделать это:

$this->data = array_filter($this->data);

РЕДАКТИРОВАТЬ: К сожалению, извините, это не решает вашу проблему. Я думаю, вы правы, я бы, вероятно, просмотрел массив и проверил значения количества.

person Alix Axel    schedule 12.08.2009
comment
К вашему сведению, CakePHP предлагает немного измененную версию этого в своем методе Set::filter() (code.cakephp.org/source/cake/libs/set.php#66) - person deizel; 13.08.2009

Некоторое время назад я написал поведение Nullable, которое может делать именно то, что вы хотите сделать. Он доступен на Github (http://github.com/robwilkerson/scratchpad/tree/196e8e8bdbf042f7051f29b077a34ae9265e0983/cakephp/behaviors). Это не так отполировано, как мне бы хотелось, чтобы это было для всеобщего потребления, но оно функционально. Я использую его в нескольких проектах в производстве.

person Rob Wilkerson    schedule 12.08.2009