Beispiel #1
0
 /**
  * @param           $xml
  * @param DbAdapter $db
  * @return Schema
  */
 public static function fromXml($xml, DbAdapter $db)
 {
     if (is_array($xml)) {
         $data = $xml;
     } else {
         $xml = simplexml_load_string($xml);
         $data = json_decode(json_encode((array) $xml), 1);
     }
     $data = Column::prepareXmlArray($data);
     $name = $data['@attributes']['name'];
     $schema = new Schema($db);
     foreach ($data['tables']['table'] as $tableArray) {
         $table = Table::fromXml($tableArray, $schema);
         $schema->addTable($table);
     }
     foreach ($data['tables']['table'] as $tableArray) {
         $indexArrayList = is_int(key($tableArray['indexes']['index'])) ? $tableArray['indexes']['index'] : $tableArray['indexes'];
         $table = $schema->getTable($tableArray['@attributes']['name']);
         foreach ($indexArrayList as $indexArray) {
             $index = AbstractIndex::fromXml($indexArray, $table);
             $table->addIndex($index);
         }
         if (isset($tableArray['links']['link'])) {
             $linkArrayList = is_int(key($tableArray['links']['link'])) ? $tableArray['links']['link'] : $tableArray['links'];
             foreach ($linkArrayList as $linkArray) {
                 $link = AbstractLink::fromXml($linkArray, $table);
                 $table->addLink($link);
             }
         }
     }
     return $schema;
 }
Beispiel #2
0
 /**
  * @param AbstractIndex $index
  * @return $this
  */
 public function addIndex(AbstractIndex $index)
 {
     $this->_indexList[$index->getName()] = $index;
     /**
      * Колонке ставим флаг уникальности
      */
     if (!$index->isMultiple() && $index->isUnique()) {
         $index->current()->setUniqueFlag(true);
     }
     return $this;
 }