public static function getSchema() { $className = get_called_class(); $array = $className::$schema; if (!isset($array['table'])) { trigger_error('invalid schema: no table defined', E_USER_ERROR); } if (!isset($array['attributes'])) { trigger_error('invalid schema: no attributes defined', E_USER_ERROR); } if (!isset($array['keys'])) { trigger_error('invalid schema: no keys defined', E_USER_ERROR); } $schemaObject = new Schema(); $schemaObject->table($array["table"]); $schemaObject->primaryKey($array['keys']); $foreignKeys = array(); foreach ($array["attributes"] as $attributeName => $attributeData) { if (isset($attributeData["type"]) && $attributeData["type"] == "uuid") { $attributeData["type"] = "varchar"; $attributeData["length"] = 13; $attributeData["uuid"] = true; } if (!isset($attributeData["column"])) { $attributeData["column"] = $attributeName; } if (isset($attributeData["entity"])) { if (!class_exists($attributeData["entity"])) { trigger_error("invalid schema: related entity '{$attributeData["entity"]}' not found", E_USER_ERROR); } $foreignClassName = $attributeData["entity"]; $foreignSchema = $foreignClassName == $className ? $schemaObject : $foreignClassName::getSchema(); $foreignAttributeName = isset($attributeData["attribute"]) ? $attributeData["attribute"] : $foreignSchema->getFirstKey(); $foreignAttributeData = $foreignSchema->getAttribute($foreignAttributeName); if (isset($foreignAttributeData["type"])) { $attributeData["type"] = isset($attributeData["type"]) ? $attributeData["type"] : $foreignAttributeData["type"]; } if (isset($foreignAttributeData["length"])) { $attributeData["length"] = isset($attributeData["length"]) ? $attributeData["length"] : $foreignAttributeData["length"]; } if (isset($foreignAttributeData["unsigned"])) { $attributeData["unsigned"] = isset($attributeData["unsigned"]) ? $attributeData["unsigned"] : $foreignAttributeData["unsigned"]; } $foreignKeys[$attributeName] = array("table" => $foreignSchema->getTable(), "column" => isset($foreignAttributeData["column"]) ? $foreignAttributeData["column"] : $foreignAttributeName, "onDelete" => isset($attributeData["onDelete"]) ? $attributeData["onDelete"] : null, "onUpdate" => isset($attributeData["onUpdate"]) ? $attributeData["onUpdate"] : null); } $schemaObject->attribute($attributeName, $attributeData); } foreach ($foreignKeys as $attributeName => $foreignKeyData) { $schemaObject->foreignKey($attributeName, $foreignKeyData); } if (isset($array['db'])) { $schemaObject->db($array['db']); } if (isset($array['indexes'])) { foreach ($array["indexes"] as $indexName => $indexColumns) { $schemaObject->index($indexName, $indexColumns); } } if (isset($array['unique'])) { foreach ($array["unique"] as $uniqueAttributes) { $schemaObject->unique($uniqueAttributes); } } if (isset($array['triggers'])) { foreach ($array["triggers"] as $triggerTable => $operationData) { foreach ($operationData as $triggerEvent => $whenData) { foreach ($whenData as $triggerTime => $triggerSQL) { $schemaObject->trigger($triggerTime, $triggerEvent, $triggerTable, $triggerSQL); } } } } return $schemaObject; }
public static function load($db, $tableName) { return new Collection(Schema::load($db, $tableName), $db); }