Skip to content

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.

MethodeColumn-KlasseCast-TypeRaw-Type
PrimaryKeyColumnintint
fk(...)ForeignKeyColumnintint
smallInt()SmallIntegerColumnintint
int()IntegerColumnintint
bigInt()BigIntegerColumnintint
float()FloatColumnfloatfloat
decimal(...)DecimalColumnstringstring
string(...)StringColumnstringstring
text()TextColumnstringstring
blob()BlobColumnstringstring
date()DateColumnDateTimeImmutablestring
time(...)TimeColumnDateTimeImmutablestring
dateTime(...)DateTimeColumnDateTimeImmutablestring
bool()BooleanColumnboolint
json()JsonColumnstringstring
enum(...)EnumColumnBackedEnumint|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 Spalte NULL-Werte enthalten darf. Standardmäßig haben alle Spalten ein NOT NULL-Constraint.
  • unique() gibt an, dass diese Spalte keine doppelten Werte enthalten darf, also dass das DBMS ein UNIQUE-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 und UNIQUE-Spalten werden automatisch indiziert, auch ohne Aufruf dieser Methode.
  • hidden() gibt an, dass diese Spalte nicht in der Rückgabe von toArray 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

php
$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
Numerische Spalten
String-Spalten
DateTime-Spalten
Sonstige Spalten

Column-Klassen

Es folgt eine ausführliche Beschreibung der einzelnen Column-Klassen, ihrer Besonderheiten und zugehörigen SQL-Datentypen.

BigIntegerColumn

todo

DBMSDatentyp
MySQLBIGINT
MariaDBBIGINT
PostgreSQLBIGINT
SQLiteINTEGER

BlobColumn

todo

DBMSDatentyp
MySQLLONGBLOB
MariaDBLONGBLOB
PostgreSQLBYTEA
SQLiteBLOB

BooleanColumn

todo

DBMSDatentyp
MySQLTINYINT(1)
MariaDBTINYINT(1)
PostgreSQLBOOLEAN
SQLiteINTEGER

DateColumn

todo

DBMSDatentyp
MySQLDATE
MariaDBDATE
PostgreSQLDATE
SQLiteNUMERIC

DateTimeColumn

todo

DBMSDatentyp
MySQLDATETIME
MariaDBDATETIME
PostgreSQLTIMESTAMP
SQLiteNUMERIC

DecimalColumn

todo

DBMSDatentyp
MySQLDECIMAL(digits,decimals)
MariaDBDECIMAL(digits,decimals)
PostgreSQLNUMERIC(digits,decimals)
SQLiteNUMERIC

EnumColumn

todo

DBMSDatentyp
MySQLINT oder VARCHAR(100)
MariaDBINT oder VARCHAR(100)
PostgreSQLINTEGER oder TEXT
SQLiteINTEGER oder TEXT

FloatColumn

todo

DBMSDatentyp
MySQLDOUBLE
MariaDBDOUBLE
PostgreSQLDOUBLE PRECISION
SQLiteREAL

ForeignKeyColumn

todo

php
fk(string $target, OnDelete $onDelete = OnDelete::Restrict)
DBMSDatentyp
MySQLBIGINT
MariaDBBIGINT
PostgreSQLBIGINT
SQLiteINTEGER

IntegerColumn

todo

DBMSDatentyp
MySQLINT
MariaDBINT
PostgreSQLINTEGER
SQLiteINTEGER

JsonColumn

todo

DBMSDatentyp
MySQLJSON
MariaDBJSON
PostgreSQLJSON
SQLiteTEXT

PrimaryKeyColumn

todo

DBMSDatentyp
MySQLBIGINT PRIMARY KEY AUTO_INCREMENT
MariaDBBIGINT PRIMARY KEY AUTO_INCREMENT
PostgreSQLBIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY
SQLiteINTEGER PRIMARY KEY AUTOINCREMENT

SmallIntegerColumn

todo

DBMSDatentyp
MySQLSMALLINT
MariaDBSMALLINT
PostgreSQLSMALLINT
SQLiteINTEGER

StringColumn

todo

DBMSDatentyp
MySQLVARCHAR($max)
MariaDBVARCHAR($max)
PostgreSQLTEXT
SQLiteTEXT

TextColumn

todo

DBMSDatentyp
MySQLLONGTEXT
MariaDBLONGTEXT
PostgreSQLTEXT
SQLiteTEXT

TimeColumn

todo

DBMSDatentyp
MySQLTIME
MariaDBTIME
PostgreSQLTIME
SQLiteNUMERIC

Custom Columns

todo