Example #1
0
 /**
  * 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();
 }