2009-08-12 14 views
2

中に/前に「NULL」と「0」を削除し、私のデータは次のようになります。CakePHPの私は「在庫」の項目の全体の多くを持つフォームを持っているSAVEALL

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

事は私にはないですquatityが0またはNULLの場合は、$ this-> data ['Inventory'] [#]を解除する方法を知っています。私はこれを1つのレコードで簡単に行うことができますが、上記のように複数のレコードでそれを行う最も簡単な方法は何ですか?

私の本能は、beforeSave()内の$ this->データをループし、値が0またはNULLの配列を持つキーを「量」のキーに設定しないように指示します。

答えて

0

これはそれを行う必要があります。

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

EDITを:おっと、申し訳ありませんが、これはあなたの問題を解決していません。私はあなたが正しいと思う、私はおそらく配列をループし、数量の値をチェックします。

+0

FYIでは、CakePHPはSet :: filter()メソッド(http://code.cakephp.org/source/cake/libs/set.php#66)で少しカスタマイズされたバージョンを提供しています – deizel

0

私はあなたが探しているだけのことをするかもしれない間にヌル可能な動作を書きました。 Github(http://github.com/robwilkerson/scratchpad/tree/196e8e8bdbf042f7051f29b077a34ae9265e0983/cakephp/behaviors)で入手できます。私は公共消費のために磨いているほど磨かれていませんが、機能的です。私は生産のいくつかのプロジェクトでそれを使用しています。

+0

ケーキは自動的にこれをやった... – brndnmg

3

CakePHPのコアSetクラスのextractメソッドを使用すると、多次元配列をループしたり、ツリー構造をたどることなく、素早くデータをフィルタリングできます。

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フィルタは、このロジックの正しい場所のように聞こえます。

関連する問題