/** * Execute an insert query for an object. * * @param Model $object * * @return bool */ public static function insert(Model &$object) { $database = self::get($object::_getDatabaseNamespace()); $connection = $database->getConnection(); $fields = $params = $placeholders = array(); $object_data = $object->_getData(); foreach ($object->_getFields(true) as $object_field => $field_properties) { $object_value = $object_data[$object_field]; $fields[] = $database->escape($object_field); if ($object_value === $field_properties['default'] && $field_properties['serial'] === true) { $placeholders[] = 'DEFAULT'; } else { $params[] = $database->valueToSQL($object_value); $placeholders[] = '?'; } } $sql = sprintf('INSERT INTO %s.%s (%s) VALUES (%s);', $database->escape($object::_getSchemaName()), $database->escape($object::_getTableName()), implode(',', $fields), implode(',', $placeholders)); $connection->prepare($sql)->execute($params); $primary_key = $object::_getPrimaryKey(); if ($primary_key !== null && count($primary_key) === 1) { $column = current($primary_key); $field = $object::_getField($column); if ($field['serial'] === true) { $liid = intval($connection->lastInsertId($field['sequence'])); $object->{$column} = $liid; } } return $object->_setLoaded(); }