Columns
Columns dienen zur Definition von Tabellenspalten, deren Datentypen und Verhalten. Außerdem ermöglichen Columns die Umwandlung primitiver zu komplexen Datentypen wie Klassen oder Enums (siehe Casting).
Übersicht
Die Klasse RHRZ\ORM\Schema\Column
besitzt statische Konstruktoren für verschiedene Arten von Columns. Folgende Tabelle listet alle verfügbaren Spaltentypen auf.
Methode | Column-Klasse | Cast-Type | Raw-Type |
---|---|---|---|
PrimaryKeyColumn | int | int | |
fk(...) | ForeignKeyColumn | int | int |
smallInt() | SmallIntegerColumn | int | int |
int() | IntegerColumn | int | int |
bigInt() | BigIntegerColumn | int | int |
float() | FloatColumn | float | float |
decimal(...) | DecimalColumn | string | string |
string(...) | StringColumn | string | string |
text() | TextColumn | string | string |
blob() | BlobColumn | string | string |
date() | DateColumn | DateTimeImmutable | string |
time(...) | TimeColumn | DateTimeImmutable | string |
dateTime(...) | DateTimeColumn | DateTimeImmutable | string |
bool() | BooleanColumn | bool | int |
json() | JsonColumn | string | string |
enum(...) | EnumColumn | BackedEnum | int|string |
Eine grobe Erläuterung der Spaltentypen findet sich im Abschnitt Column-Kategorien, ausführliche Beschreibungen im Abschnitt Column-Klassen.
Verhalten
Nachdem eine Column-Instanz mit einem der statischen Konstruktoren erstellt wurde, können folgende Methoden verwendet werden, um das Verhalten der Spalte festzulegen.
nullable()
gibt an, dass diese SpalteNULL
-Werte enthalten darf. Standardmäßig haben alle Spalten einNOT NULL
-Constraint.unique()
gibt an, dass diese Spalte keine doppelten Werte enthalten darf, also dass das DBMS einUNIQUE
-Constraint und einen entsprechenden Index für diese Spalte erstellen soll.index()
gibt an, dass das DBMS einen Index für diese Spalte erstellen soll. Fremdschlüsselspalten undUNIQUE
-Spalten werden automatisch indiziert, auch ohne Aufruf dieser Methode.hidden()
gibt an, dass diese Spalte nicht in der Rückgabe vontoArray
enthalten sein soll, sofern sie nicht explizit mit dem Parameter$with
angefordert wird. Dies ist nützlich für sensible Daten wie Passwörter.
Beispiele
$table->setColumns([
'category_id' => Column::fk(Category::class),
'name' => Column::string(50)->unique(),
'description' => Column::text()->nullable(),
'price' => Column::decimal(),
'public' => Column::bool(),
]);
Casting
todo
Column-Kategorien
Diese Auflistung soll erleichtern, den passenden Spaltentyp zu finden.
Schlüsselspalten
PrimaryKeyColumn
für die Primärschlüsselspalteid
ForeignKeyColumn
für Fremdschlüsselbeziehungen
Numerische Spalten
SmallIntegerColumn
für ganze Zahlen vonbis IntegerColumn
für ganze Zahlen vonbis BigIntegerColumn
für ganze Zahlen vonbis FloatColumn
für GleitkommazahlenDecimalColumn
für Festkommazahlen
String-Spalten
StringColumn
für Strings bis mehrere hundert Zeichen (Default 100)TextColumn
für lange Texte bis 4 GB (Byte) BlobColumn
für Binary Large Objects
DateTime-Spalten
DateColumn
für Daten im FormatY-m-d
TimeColumn
für Uhrzeiten im FormatH:i:s
DateTimeColumn
für Datum und Uhrzeit im FormatY-m-d H:i:s
Sonstige Spalten
BooleanColumn
für die booleschen Wertetrue
undfalse
JsonColumn
für JSONEnumColumn
für Backed Enums- Selbstdefinierte Column-Klassen (siehe Custom Columns)
Column-Klassen
Es folgt eine ausführliche Beschreibung der einzelnen Column-Klassen, ihrer Besonderheiten und zugehörigen SQL-Datentypen.
BigIntegerColumn
todo
DBMS | Datentyp |
---|---|
MySQL | BIGINT |
MariaDB | BIGINT |
PostgreSQL | BIGINT |
SQLite | INTEGER |
BlobColumn
todo
DBMS | Datentyp |
---|---|
MySQL | LONGBLOB |
MariaDB | LONGBLOB |
PostgreSQL | BYTEA |
SQLite | BLOB |
BooleanColumn
todo
DBMS | Datentyp |
---|---|
MySQL | TINYINT(1) |
MariaDB | TINYINT(1) |
PostgreSQL | BOOLEAN |
SQLite | INTEGER |
DateColumn
todo
DBMS | Datentyp |
---|---|
MySQL | DATE |
MariaDB | DATE |
PostgreSQL | DATE |
SQLite | NUMERIC |
DateTimeColumn
todo
DBMS | Datentyp |
---|---|
MySQL | DATETIME |
MariaDB | DATETIME |
PostgreSQL | TIMESTAMP |
SQLite | NUMERIC |
DecimalColumn
todo
DBMS | Datentyp |
---|---|
MySQL | DECIMAL(digits,decimals) |
MariaDB | DECIMAL(digits,decimals) |
PostgreSQL | NUMERIC(digits,decimals) |
SQLite | NUMERIC |
EnumColumn
todo
DBMS | Datentyp |
---|---|
MySQL | INT oder VARCHAR(100) |
MariaDB | INT oder VARCHAR(100) |
PostgreSQL | INTEGER oder TEXT |
SQLite | INTEGER oder TEXT |
FloatColumn
todo
DBMS | Datentyp |
---|---|
MySQL | DOUBLE |
MariaDB | DOUBLE |
PostgreSQL | DOUBLE PRECISION |
SQLite | REAL |
ForeignKeyColumn
todo
fk(string $target, OnDelete $onDelete = OnDelete::Restrict)
DBMS | Datentyp |
---|---|
MySQL | BIGINT |
MariaDB | BIGINT |
PostgreSQL | BIGINT |
SQLite | INTEGER |
IntegerColumn
todo
DBMS | Datentyp |
---|---|
MySQL | INT |
MariaDB | INT |
PostgreSQL | INTEGER |
SQLite | INTEGER |
JsonColumn
todo
DBMS | Datentyp |
---|---|
MySQL | JSON |
MariaDB | JSON |
PostgreSQL | JSON |
SQLite | TEXT |
PrimaryKeyColumn
todo
DBMS | Datentyp |
---|---|
MySQL | BIGINT PRIMARY KEY AUTO_INCREMENT |
MariaDB | BIGINT PRIMARY KEY AUTO_INCREMENT |
PostgreSQL | BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY |
SQLite | INTEGER PRIMARY KEY AUTOINCREMENT |
SmallIntegerColumn
todo
DBMS | Datentyp |
---|---|
MySQL | SMALLINT |
MariaDB | SMALLINT |
PostgreSQL | SMALLINT |
SQLite | INTEGER |
StringColumn
todo
DBMS | Datentyp |
---|---|
MySQL | VARCHAR($max) |
MariaDB | VARCHAR($max) |
PostgreSQL | TEXT |
SQLite | TEXT |
TextColumn
todo
DBMS | Datentyp |
---|---|
MySQL | LONGTEXT |
MariaDB | LONGTEXT |
PostgreSQL | TEXT |
SQLite | TEXT |
TimeColumn
todo
DBMS | Datentyp |
---|---|
MySQL | TIME |
MariaDB | TIME |
PostgreSQL | TIME |
SQLite | NUMERIC |
Custom Columns
todo