PHP: RuBisCO ORM -- Konzept
Die erste Version von RuBisCO Todo habe ich in ca. 8 Stunden geschrieben. RuBisCO ORM soll das Grundgerüst eines solchen Webprogramms per Mausklick aus einer SQL-Tabellendefinition plus zusätzlicher Informationen zur Überprüfung der Eingabe generieren.
Im Fall von RuBisCO Todo also aus:
CREATE TABLE tasks ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, task VARCHAR(256) NOT NULL, status VARCHAR(20) NOT NULL DEFAULT "open" ) ENGINE = innodb DEFAULT CHARSET = utf8;
Plus den zusätzlichen Informationen zur Überprüfung der Eingabe:
CREATE TABLE tasks (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
task VARCHAR(256) NOT NULL rbsNotEmpty,
status VARCHAR(20) NOT NULL DEFAULT "open"
rbsOptions = ["open", "closed", "work", "finished"]
) ENGINE = innodb
DEFAULT CHARSET = utf8;
Dabei wird der ORM auch Joins und Foreign Keys unterstützen, so dass das status-Feld zur Normalisierung in eine eigene Tabelle ausgelagert werden kann:
CREATE TABLE tasks (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
task VARCHAR(256) NOT NULL,
status INT NOT NULL DEFAULT 1,
FOREIGN KEY (status) REFERENCES status(id)
)
ENGINE = innodb,
DEFAULT CHARSET = utf8;
CREATE TABLE status (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
status VARCHAR(20) NOT NULL DEFAULT "open"
rbsOptions = ["open", "closed", "work", "finished"]
)
ENGINE = innodb
DEFAULT CHARSET = utf8;
Aufgebaut ist RuBisCO ORM aus Klassen für die SQL-Tabellen und -Felder, deren Methoden den Quelltext generieren:
namespace rubisco\tools\orm;
class SQLTable {
public $name;
public $fields = array();
}// SQLTable
namespace rubisco\tools\orm\type;
class SQLField {
public $name;
public $default;
public $notNull;
public $foreignKey;
public $preg; // String
public $pregMatch; // Bool
}// SQLField
namespace rubisco\tools\orm\type;
class SQLInt extends SQLField {
public $min;
public $max;
}// SQLInt
Hmm, mal anhand eines Prototyps für eine Tabelle nur mit id INT ausprobieren, ob es grundsätzlich wie gedacht funktioniert.
