null = FeatureFlags::$columnNullDefault; } /** * Sets the column name. * * @param string $name Name * @return $this */ public function setName(string $name) { $this->name = $name; return $this; } /** * Gets the column name. * * @return string|null */ public function getName(): ?string { return $this->name; } /** * Sets the column type. * * @param string|\Phinx\Util\Literal $type Column type * @return $this */ public function setType($type) { $this->type = $type; return $this; } /** * Gets the column type. * * @return string|\Phinx\Util\Literal */ public function getType() { return $this->type; } /** * Sets the column limit. * * @param int|null $limit Limit * @return $this */ public function setLimit(?int $limit) { $this->limit = $limit; return $this; } /** * Gets the column limit. * * @return int|null */ public function getLimit(): ?int { return $this->limit; } /** * Sets whether the column allows nulls. * * @param bool $null Null * @return $this */ public function setNull(bool $null) { $this->null = (bool)$null; return $this; } /** * Gets whether the column allows nulls. * * @return bool */ public function getNull(): bool { return $this->null; } /** * Does the column allow nulls? * * @return bool */ public function isNull(): bool { return $this->getNull(); } /** * Sets the default column value. * * @param mixed $default Default * @return $this */ public function setDefault($default) { $this->default = $default; return $this; } /** * Gets the default column value. * * @return mixed */ public function getDefault() { return $this->default; } /** * Sets generated option for identity columns. Ignored otherwise. * * @param string|null $generated Generated option * @return $this */ public function setGenerated(?string $generated) { $this->generated = $generated; return $this; } /** * Gets generated option for identity columns. Null otherwise * * @return string|null */ public function getGenerated(): ?string { return $this->generated; } /** * Sets whether or not the column is an identity column. * * @param bool $identity Identity * @return $this */ public function setIdentity(bool $identity) { $this->identity = $identity; return $this; } /** * Gets whether or not the column is an identity column. * * @return bool */ public function getIdentity(): bool { return $this->identity; } /** * Is the column an identity column? * * @return bool */ public function isIdentity(): bool { return $this->getIdentity(); } /** * Sets the name of the column to add this column after. * * @param string $after After * @return $this */ public function setAfter(string $after) { $this->after = $after; return $this; } /** * Returns the name of the column to add this column after. * * @return string|null */ public function getAfter(): ?string { return $this->after; } /** * Sets the 'ON UPDATE' mysql column function. * * @param string $update On Update function * @return $this */ public function setUpdate(string $update) { $this->update = $update; return $this; } /** * Returns the value of the ON UPDATE column function. * * @return string|null */ public function getUpdate(): ?string { return $this->update; } /** * Sets the number precision for decimal or float column. * * For example `DECIMAL(5,2)`, 5 is the precision and 2 is the scale, * and the column could store value from -999.99 to 999.99. * * @param int|null $precision Number precision * @return $this */ public function setPrecision(?int $precision) { $this->setLimit($precision); return $this; } /** * Gets the number precision for decimal or float column. * * For example `DECIMAL(5,2)`, 5 is the precision and 2 is the scale, * and the column could store value from -999.99 to 999.99. * * @return int|null */ public function getPrecision(): ?int { return $this->limit; } /** * Sets the column identity increment. * * @param int $increment Number increment * @return $this */ public function setIncrement(int $increment) { $this->increment = $increment; return $this; } /** * Gets the column identity increment. * * @return int|null */ public function getIncrement(): ?int { return $this->increment; } /** * Sets the column identity seed. * * @param int $seed Number seed * @return $this */ public function setSeed(int $seed) { $this->seed = $seed; return $this; } /** * Gets the column identity seed. * * @return int */ public function getSeed(): ?int { return $this->seed; } /** * Sets the number scale for decimal or float column. * * For example `DECIMAL(5,2)`, 5 is the precision and 2 is the scale, * and the column could store value from -999.99 to 999.99. * * @param int|null $scale Number scale * @return $this */ public function setScale(?int $scale) { $this->scale = $scale; return $this; } /** * Gets the number scale for decimal or float column. * * For example `DECIMAL(5,2)`, 5 is the precision and 2 is the scale, * and the column could store value from -999.99 to 999.99. * * @return int */ public function getScale(): ?int { return $this->scale; } /** * Sets the number precision and scale for decimal or float column. * * For example `DECIMAL(5,2)`, 5 is the precision and 2 is the scale, * and the column could store value from -999.99 to 999.99. * * @param int $precision Number precision * @param int $scale Number scale * @return $this */ public function setPrecisionAndScale(int $precision, int $scale) { $this->setLimit($precision); $this->scale = $scale; return $this; } /** * Sets the column comment. * * @param string|null $comment Comment * @return $this */ public function setComment(?string $comment) { $this->comment = $comment; return $this; } /** * Gets the column comment. * * @return string */ public function getComment(): ?string { return $this->comment; } /** * Sets whether field should be signed. * * @param bool $signed Signed * @return $this */ public function setSigned(bool $signed) { $this->signed = (bool)$signed; return $this; } /** * Gets whether field should be signed. * * @return bool */ public function getSigned(): bool { return $this->signed; } /** * Should the column be signed? * * @return bool */ public function isSigned(): bool { return $this->getSigned(); } /** * Sets whether the field should have a timezone identifier. * Used for date/time columns only! * * @param bool $timezone Timezone * @return $this */ public function setTimezone(bool $timezone) { $this->timezone = (bool)$timezone; return $this; } /** * Gets whether field has a timezone identifier. * * @return bool */ public function getTimezone(): bool { return $this->timezone; } /** * Should the column have a timezone? * * @return bool */ public function isTimezone(): bool { return $this->getTimezone(); } /** * Sets field properties. * * @param array $properties Properties * @return $this */ public function setProperties(array $properties) { $this->properties = $properties; return $this; } /** * Gets field properties * * @return array */ public function getProperties(): array { return $this->properties; } /** * Sets field values. * * @param string[]|string $values Value(s) * @return $this */ public function setValues($values) { if (!is_array($values)) { $values = preg_split('/,\s*/', $values) ?: []; } $this->values = $values; return $this; } /** * Gets field values * * @return array|null */ public function getValues(): ?array { return $this->values; } /** * Sets the column collation. * * @param string $collation Collation * @return $this */ public function setCollation(string $collation) { $this->collation = $collation; return $this; } /** * Gets the column collation. * * @return string|null */ public function getCollation(): ?string { return $this->collation; } /** * Sets the column character set. * * @param string $encoding Encoding * @return $this */ public function setEncoding(string $encoding) { $this->encoding = $encoding; return $this; } /** * Gets the column character set. * * @return string|null */ public function getEncoding(): ?string { return $this->encoding; } /** * Sets the column SRID. * * @param int $srid SRID * @return $this */ public function setSrid(int $srid) { $this->srid = $srid; return $this; } /** * Gets the column SRID. * * @return int|null */ public function getSrid(): ?int { return $this->srid; } /** * Gets all allowed options. Each option must have a corresponding `setFoo` method. * * @return array */ protected function getValidOptions(): array { return [ 'limit', 'default', 'null', 'identity', 'scale', 'after', 'update', 'comment', 'signed', 'timezone', 'properties', 'values', 'collation', 'encoding', 'srid', 'seed', 'increment', 'generated', ]; } /** * Gets all aliased options. Each alias must reference a valid option. * * @return array */ protected function getAliasedOptions(): array { return [ 'length' => 'limit', 'precision' => 'limit', ]; } /** * Utility method that maps an array of column options to this objects methods. * * @param array $options Options * @throws \RuntimeException * @return $this */ public function setOptions(array $options) { $validOptions = $this->getValidOptions(); $aliasOptions = $this->getAliasedOptions(); if (isset($options['identity']) && $options['identity'] && !isset($options['null'])) { $options['null'] = false; } foreach ($options as $option => $value) { if (isset($aliasOptions[$option])) { // proxy alias -> option $option = $aliasOptions[$option]; } if (!in_array($option, $validOptions, true)) { throw new RuntimeException(sprintf('"%s" is not a valid column option.', $option)); } $method = 'set' . ucfirst($option); $this->$method($value); } return $this; } }