Die wpdb-Klasse in WordPress kam mir schon immer ein bisschen seltsam vor, da ich an PDO gewöhnt war und lange danach gesucht habe, wie ich denn nun meine Objekte in die Datenbank schreibe. Die einzige Lösung, die ich bisher gefunden habe, ist per Reflection, vielleicht hat ja jemand eine bessere Idee? Ich freue mich über Kommentare! Hier der Code:
/** * * * @param string $table Die Tabelle, in die per INSERT geschrieben werden soll * @param object $object Das Objekt * @return int|false */ function insertObject($table, $object) { if(!is_object($object)) return false; $reflection = new ReflectionObject($object); // getProperties() als Parameter ReflectionProperty::IS_PUBLIC // übergeben, falls nur public-member des Objekts // in die Datenbank geschrieben werden sollen $properties = $reflection->getProperties(); $dataArray = array(); foreach($properties as $property) { // Die folgende Zeile löschen, falls nur public-member des Objekts in die Datenbank geschrieben werden sollen // Für beides gibt es meiner Meinung nach sinnvolle Use Cases, ggf. einen entsprechenden Parameter hinzufügen $property->setAccessible(true); $dataArray[$property->getName()] = $property->getValue($object); } global $wpdb; return $wpdb->insert($table, $dataArray); }
Üblicherweise verzichte ich in meinem Code auf den $table-Parameter um es noch zu vereinfachen und verwende entweder den Klassennamen als Tabellennamen oder habe eine statische Konstante const TABLE = ‘tabellenname’; in der jeweiligen Klasse.