public function testGetDatabaseTable() { $field1 = new PropertyField('field1', 'type'); $field2 = new PropertyField('field2', 'type'); $field3 = new HasManyField('field3', 'model'); $index = new Index('field2', array($field2)); $modelTable = new ModelTable('table'); $modelTable->addField($field1); $modelTable->addField($field2); $modelTable->addField($field3); $modelTable->addIndex($index); $pk = new PropertyField('id', 'pk'); $pk->setIsAutonumbering(true); $pk->setIsPrimaryKey(true); $databaseTable = new Table('table'); $databaseTable->addField($pk); $databaseTable->addField($field1); $databaseTable->addField($field2); $databaseTable->addIndex($index); $this->assertEquals($databaseTable, $modelTable->getDatabaseTable()); }
public function testHasIndex() { $table = new Table('table'); $field = new Field('field', 'type'); $index = new Index('index', array($field)); $table->addField($field); $table->addIndex($index); $this->assertTrue($table->hasIndex('index')); $this->assertFalse($table->hasIndex('unexistant')); }
/** * Get the database table definition of this model * @return zibo\library\database\definition\Table */ public function getDatabaseTable() { $table = new Table($this->name); foreach ($this->fields as $fieldName => $field) { if ($field->isLocalized() || $field instanceof HasManyField || $field instanceof HasOneField) { continue; } $table->addField($field); if ($field instanceof BelongsToField) { $name = $this->name . '_' . ucfirst($fieldName); if (strlen($name) > 64) { $name = '_' . ucfirst($fieldName); $name = substr($this->name, 0, 64 - strlen($name)) . $name; } $foreignKey = new ForeignKey($fieldName, $field->getRelationModelName(), self::PRIMARY_KEY, $name); $table->setForeignKey($foreignKey); } } foreach ($this->indexes as $index) { $fields = $index->getFields(); foreach ($fields as $field) { if ($field->isLocalized()) { continue 2; } } $table->addIndex($index); } return $table; }