Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
 public static function load($db, $tableName)
 {
     return new Collection(Schema::load($db, $tableName), $db);
 }