/** * * @return self */ public function save() { $bind = []; if (empty($this->_cleanData)) { $data = $this->getArrayCopy(); $bind = []; foreach ($data as $key => $value) { $bind[] = Type\Base::getTypeObject(static::$_columns[$key], $value); } $query = Query::insertInto(static::$_name)->clause('(' . \implode(', ', \array_keys($data)) . ')')->values('(' . \implode(', ', \array_fill(0, count($data), '?')) . ')')->bind($bind); } else { $assignments = []; foreach ($this->_modifiedData as $key => $value) { $assignments[] = $key . ' = ?'; $bind[] = Type\Base::getTypeObject(static::$_columns[$key], $value); } $conditions = []; foreach (static::$_primary as $key) { $conditions[] = $key . ' = ?'; $bind[] = Type\Base::getTypeObject(static::$_columns[$key], $this[$key]); } $query = Query::update(static::$_name)->set(implode(', ', $assignments))->where(implode(' AND ', $conditions))->bind($bind); } $query->setDbAdapter(static::$_dbAdapter)->setConsistency(static::$_writeConsistency)->querySync(); return $this; }