/** * Crafts and executes an SQL statement to insert the object into MySQL * * @param \Rhubarb\Stem\Models\Model $object */ private function insertObject(Model $object) { $schema = $this->schema; $changes = $object->takeChangeSnapshot(); $params = []; $columns = []; $sql = "INSERT INTO `{$schema->schemaName}`"; $schemaColumns = $schema->getColumns(); foreach ($changes as $columnName => $value) { $changeData = $changes; if (isset($schemaColumns[$columnName])) { $storageColumns = $schemaColumns[$columnName]->getStorageColumns(); $transforms = $this->columnTransforms[$columnName]; if ($transforms[1] !== null) { $closure = $transforms[1]; $transformedData = $closure($changes); if (is_array($transformedData)) { $changeData = $transformedData; } else { $changeData[$columnName] = $transformedData; } } foreach ($storageColumns as $storageColumnName => $storageColumn) { $value = isset($changeData[$storageColumnName]) ? $changeData[$storageColumnName] : null; $columns[] = "`" . $storageColumnName . "` = :" . $storageColumnName; if ($value === null) { $value = $storageColumn->defaultValue; } $params[$storageColumnName] = $value; } } } if (sizeof($columns) > 0) { $sql .= " SET " . implode(", ", $columns); } else { $sql .= " VALUES ()"; } $id = self::executeInsertStatement($sql, $params); $object[$object->getUniqueIdentifierColumnName()] = $id; }