protected function createSchema() { $this->addAutoIncrementId(); $this->postId = DataType::integer(DataType::UNSIGNED); $this->author = DataType::string(255); $this->content = DataType::text(); $this->addTimeStamps(); $this->addIndex('postId', 'postId'); }
/** * Construct file model. */ public function __construct() { parent::__construct('File'); $this->addField('path', tr('Path'), DataType::string()); $this->addField('name', tr('Name'), DataType::string()); $this->addField('type', tr('Type'), DataType::enum(array('directory', 'file'))); $this->addField('size', tr('Size'), DataType::integer(DataType::UNSIGNED)); $this->addField('modified', tr('Modified'), DataType::dateTime()); $this->addField('created', tr('Created'), DataType::dateTime()); }
/** * {@inheritdoc} */ public function before() { parent::before(); if (isset($this->request->cookies['data-table-per-page'])) { $this->object->rowsPerPage = intval($this->request->cookies['data-table-per-page']); } if (isset($this->request->cookies['data-table-density'])) { $this->object->density = $this->request->cookies['data-table-density']; } else { $this->object->density = 'medium'; } $tableSettings = new Form('tableSettings'); $tableSettings->addField('perPage', DataType::integer(DataType::UNSIGNED)); $tableSettings->__set('perPage', $this->object->rowsPerPage); $tableSettings->addField('density', DataType::enum(array('low', 'medium', 'high'))); $tableSettings->__set('density', $this->object->density); $this->viewData['tableSettings'] = $tableSettings; }
/** * Convert output of PRAGMA to DataType. * @param array $row Row result. * @throws TypeException If type unsupported. * @return DataType The type. */ private function toDataType($row) { if (preg_match('/ *([^ (]+) *(\\(([0-9]+)\\))? */i', $row['type'], $matches) !== 1) { throw new TypeException(tr('Cannot read type "%1" for column: %2', $row['type'], $row['name'])); } $actualType = strtolower($matches[1]); $length = isset($matches[3]) ? $matches[3] : 0; $null = (isset($row['notnull']) and $row['notnull'] != '1'); $default = null; if (isset($row['dflt_value'])) { $default = stripslashes(preg_replace('/^\'|\'$/', '', $row['dflt_value'])); } switch ($actualType) { case 'integer': return DataType::integer(DataType::BIG, $null, isset($default) ? intval($default) : null); case 'real': return DataType::float($null, isset($default) ? floatval($default) : null); case 'text': return DataType::text($null, $default); case 'blob': return DataType::binary($null, $default); } throw new TypeException(tr('Unsupported SQLite type for column: %1', $row['name'])); }
/** * Add an unsigned auto increment integer. * @param string $id Field name. */ public function addAutoIncrementId($id = 'id') { if (!$this->_readOnly) { $this->{$id} = DataType::integer(DataType::AUTO_INCREMENT | DataType::UNSIGNED); $this->setPrimaryKey($id); } }
/** * Join with and count the content of an associated collection (associated * using either "hasMany" or "hasAndBelongsToMany"). * @param string $association Name of association. * @param ReadSelection $selection Optional selection. * @return ReadSelection Resulting selection. */ public function withCount($association, ReadSelection $selection = null) { if (!isset($selection)) { $selection = new SelectionBuilder($this); } if (!isset($this->associations)) { $this->createAssociations(); } if (!isset($this->associations[$association])) { throw new InvalidAssociationException(tr('Unknown association: %1', $association)); } $field = $association; $association = $this->associations[$field]; $other = $association['model']; $thisKey = $association['thisKey']; $otherKey = $association['otherKey']; $id = $this->primaryKey; $otherId = $other->primaryKey; if (isset($association['join'])) { $join = $association['join']; $otherPrimary = $association['otherPrimary']; $selection = $selection->leftJoin($join, where('J.%c = %m.%c', $thisKey, $this->name, $id), 'J'); $condition = where('%c.%c = J.%c', $field, $otherId, $otherKey); $count = where('COUNT(J.%c)', $otherKey); } else { $condition = where('%c.%c = %m.%c', $field, $thisKey, $this->name, $id); $count = where('COUNT(%c.%c)', $field, $thisKey); } if (isset($association['condition'])) { $condition = $condition->and($association['condition']); } $selection = $selection->leftJoin($other, $condition, $field); $selection->groupBy(where('%m.%c', $this->name, $id)); return $selection->with($field . '_count', $count, DataType::integer()); }
/** * Convert output of SHOW COLUMN to DataType. * @param array $row Row result. * @throws TypeException If type unsupported. * @return DataType The type. */ private function toDataType($row) { $null = $row['is_nullable'] != 'NO'; $default = null; if (isset($row['column_default'])) { $default = $row['column_default']; } $type = $row['data_type']; if (strpos($type, 'int') !== false) { $intFlags = 0; if (preg_match('/^nextval\\(/', $default) === 1) { $intFlags = DataType::AUTO_INCREMENT; $default = null; } else { if (isset($default)) { $default = intval($default); } } if (strpos($type, 'bigint') !== false) { return DataType::integer($intFlags | DataType::BIG, $null, $default); } if (strpos($type, 'smallint') !== false) { return DataType::integer($intFlags | DataType::SMALL, $null, $default); } return DataType::integer($intFlags, $null, $default); } if (strpos($type, 'double') !== false) { return DataType::float($null, isset($default) ? floatval($default) : null); } if (strpos($type, 'bool') !== false) { return DataType::boolean($null, isset($default) ? boolval($default) : null); } if (preg_match("/^'(.*)'::[a-z ]+\$/", $default, $matches) === 1) { $default = $matches[1]; } else { $default = null; } if (strpos($type, 'character') !== false) { $length = $row['character_maximum_length']; return DataType::string($length, $null, $default); } if (strpos($type, 'date') !== false) { return DataType::date($null, isset($default) ? strtotime($default . ' UTC') : null); } if (strpos($type, 'timestamp') !== false) { return DataType::dateTime($null, isset($default) ? strtotime($default . ' UTC') : null); } if (strpos($type, 'text') !== false) { return DataType::text($null, $default); } throw new TypeException(tr('Unsupported PostgreSQL type "%1" for column: %2', $row['data_type'], $row['column_name'])); }
/** * Convert output of SHOW COLUMN to DataType. * @param array $row Row result. * @throws TypeException If type unsupported. * @return DataType The type. */ private function toDataType($row) { $null = (isset($row['Null']) and $row['Null'] != 'NO'); $default = null; if (isset($row['Default'])) { $default = $row['Default']; } if (preg_match('/enum\\((.+)\\)/i', $row['Type'], $matches) === 1) { preg_match_all('/\'([^\']+)\'/', $matches[1], $matches); $values = $matches[1]; return DataType::enum($values, $null, $default); } preg_match('/ *([^ (]+) *(\\(([0-9]+)\\))? *(unsigned)? *?/i', $row['Type'], $matches); $actualType = strtolower($matches[1]); $length = isset($matches[3]) ? intval($matches[3]) : 0; $intFlags = 0; if (isset($matches[4])) { $intFlags |= DataType::UNSIGNED; } if (strpos($row['Extra'], 'auto_increment') !== false) { $intFlags |= DataType::AUTO_INCREMENT; } switch ($actualType) { case 'bigint': $intFlags |= DataType::BIG; return DataType::integer($intFlags, $null, isset($default) ? intval($default) : null); case 'smallint': $intFlags |= DataType::SMALL; return DataType::integer($intFlags, $null, isset($default) ? intval($default) : null); case 'tinyint': $intFlags |= DataType::TINY; return DataType::integer($intFlags, $null, isset($default) ? intval($default) : null); case 'int': return DataType::integer($intFlags, $null, isset($default) ? intval($default) : null); case 'double': return DataType::float($null, isset($default) ? floatval($default) : null); case 'varchar': return DataType::string($length, $null, $default); case 'blob': return DataType::binary($null, $default); case 'date': return DataType::date($null, isset($default) ? strtotime($default . ' UTC') : null); case 'datetime': return DataType::dateTime($null, isset($default) ? strtotime($default . ' UTC') : null); case 'text': return DataType::text($null, $default); } throw new TypeException(tr('Unsupported MySQL type for column: %1', $row['Field'])); }
/** * Get the type of the id field. * @return DataType Type of id field. */ protected function getIdType() { return DataType::integer(DataType::UNSIGNED); }