2 Stimmen

cakephp entfernt "NULL" und "0" vor/bei saveAll

Ich habe ein Formular mit einer ganzen Reihe von "Inventar"-Elementen, meine Daten sehen wie folgt aus:

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

Die Sache ist, dass ich nicht weiß, wie man $this->data['Inventory'][#] zurücksetzt, wenn die Menge entweder 0 oder NULL ist. Ich kann dies leicht mit einem einzelnen Datensatz tun, aber was ist der einfachste Weg, um es mit mehreren Datensätzen wie oben zu tun?

mein Instinkt sagt mir, Schleife durch $this->data in beforeSave() und unset was auch immer Schlüssel mit und Array-Wert mit Wert von 0 oder NULL für Schlüssel "Menge", gibt es einen besseren Weg?

3voto

deizel Punkte 10484

El extract Methode von CakePHP's Kern Set Klasse ermöglicht es Ihnen, Ihre Daten schnell zu filtern, ohne dass Sie Schleifen durch mehrdimensionale Arrays ziehen oder Baumstrukturen durchqueren müssen.

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

El beforeSave Filter scheint der richtige Ort für diese Logik zu sein.

0voto

Alix Axel Punkte 146320

Das sollte genügen:

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

EDIT: Ups, tut mir leid, dass dies Ihr Problem nicht löst. Ich denke, Sie haben Recht, ich würde wahrscheinlich Schleife durch das Array und überprüfen Sie die Werte der Menge.

0voto

Rob Wilkerson Punkte 39218

Ich schrieb eine Nullable Verhalten eine Weile zurück, die genau das tun kann, was Sie suchen zu tun. Es ist auf Github verfügbar ( http://github.com/robwilkerson/scratchpad/tree/196e8e8bdbf042f7051f29b077a34ae9265e0983/cakephp/behaviors ). Es ist nicht so ausgefeilt, wie ich es mir für die Öffentlichkeit wünschen würde, aber es ist funktionell. Ich verwende es bei mehreren Projekten in der Produktion.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X