/** * Provided an array of modelClassNames database schema generation is performed using each model's metadata. * @param array $modelClassNames * @param $messageLogger */ public static function generateTablesFromModelClassNames(array $modelClassNames, &$messageLogger) { $tables = array(); if (empty($modelClassNames)) { return; } $messageLogger->addInfoMessage(Zurmo::t('Core', 'Building Table Schema for {{count}} Models', array('{{count}}' => count($modelClassNames)))); foreach ($modelClassNames as $modelClassName) { $table = RedBeanModelToTableSchemaAdapter::resolve($modelClassName, $messageLogger); if ($table) { $tables[] = $table; } } foreach ($tables as $schemaDefinition) { $tableName = key($schemaDefinition); $polymorphicColumns = RedBeanModelRelationToColumnAdapter::resolvePolymorphicColumnsByTableName($tableName); if (!empty($polymorphicColumns)) { $columns = CMap::mergeArray($schemaDefinition[$tableName]['columns'], $polymorphicColumns); $schemaDefinition[$tableName]['columns'] = $columns; } CreateOrUpdateExistingTableFromSchemaDefinitionArrayUtil::generateOrUpdateTableBySchemaDefinition($schemaDefinition, $messageLogger); $messageLogger->addInfoMessage(Zurmo::t('Core', 'Scheme generated for {{table}}.', array('{{table}}' => $tableName))); } $messageLogger->addInfoMessage(Zurmo::t('Core', 'Schema generation completed')); }
/** * @depends testResolve */ public function testResolveForTestModel() { $expectedSchema = array('emailtemplatemodeltestitem' => array('columns' => array(array('name' => 'firstname', 'type' => 'VARCHAR(32)', 'unsigned' => null, 'notNull' => 'NULL', 'collation' => 'COLLATE utf8_unicode_ci', 'default' => 'DEFAULT NULL'), array('name' => 'lastname', 'type' => 'VARCHAR(32)', 'unsigned' => null, 'notNull' => 'NULL', 'collation' => 'COLLATE utf8_unicode_ci', 'default' => 'DEFAULT NULL'), array('name' => 'boolean', 'type' => 'TINYINT(1) UNSIGNED', 'unsigned' => null, 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'boolean2', 'type' => 'TINYINT(1) UNSIGNED', 'unsigned' => null, 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'date', 'type' => 'DATE', 'unsigned' => null, 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'date2', 'type' => 'DATE', 'unsigned' => null, 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'date3', 'type' => 'DATE', 'unsigned' => null, 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'date4', 'type' => 'DATE', 'unsigned' => null, 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'datetime', 'type' => 'DATETIME', 'unsigned' => null, 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'datetime2', 'type' => 'DATETIME', 'unsigned' => null, 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'datetime3', 'type' => 'DATETIME', 'unsigned' => null, 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'datetime4', 'type' => 'DATETIME', 'unsigned' => null, 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'float', 'type' => 'DOUBLE', 'unsigned' => null, 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'integer', 'type' => 'INT(11)', 'unsigned' => null, 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'phone', 'type' => 'VARCHAR(14)', 'unsigned' => null, 'notNull' => 'NULL', 'collation' => 'COLLATE utf8_unicode_ci', 'default' => 'DEFAULT NULL'), array('name' => 'string', 'type' => 'VARCHAR(64)', 'unsigned' => null, 'notNull' => 'NULL', 'collation' => 'COLLATE utf8_unicode_ci', 'default' => 'DEFAULT NULL'), array('name' => 'textarea', 'type' => 'TEXT', 'unsigned' => null, 'notNull' => 'NULL', 'collation' => 'COLLATE utf8_unicode_ci', 'default' => 'DEFAULT NULL'), array('name' => 'url', 'type' => 'VARCHAR(255)', 'unsigned' => null, 'notNull' => 'NULL', 'collation' => 'COLLATE utf8_unicode_ci', 'default' => 'DEFAULT NULL'), array('name' => 'ownedsecurableitem_id', 'type' => 'INT(11)', 'unsigned' => 'UNSIGNED', 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'currencyvalue_id', 'type' => 'INT(11)', 'unsigned' => 'UNSIGNED', 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'dropdown_customfield_id', 'type' => 'INT(11)', 'unsigned' => 'UNSIGNED', 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'dropdown2_customfield_id', 'type' => 'INT(11)', 'unsigned' => 'UNSIGNED', 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'radiodropdown_customfield_id', 'type' => 'INT(11)', 'unsigned' => 'UNSIGNED', 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'multidropdown_multiplevaluescustomfield_id', 'type' => 'INT(11)', 'unsigned' => 'UNSIGNED', 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'tagcloud_multiplevaluescustomfield_id', 'type' => 'INT(11)', 'unsigned' => 'UNSIGNED', 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'primaryemail_email_id', 'type' => 'INT(11)', 'unsigned' => 'UNSIGNED', 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'primaryaddress_address_id', 'type' => 'INT(11)', 'unsigned' => 'UNSIGNED', 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'secondaryemail_email_id', 'type' => 'INT(11)', 'unsigned' => 'UNSIGNED', 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'likecontactstate_contactstate_id', 'type' => 'INT(11)', 'unsigned' => 'UNSIGNED', 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => '_user_id', 'type' => 'INT(11)', 'unsigned' => 'UNSIGNED', 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL'), array('name' => 'user2__user_id', 'type' => 'INT(11)', 'unsigned' => 'UNSIGNED', 'notNull' => 'NULL', 'collation' => null, 'default' => 'DEFAULT NULL')), 'indexes' => array())); $modelClassName = 'EmailTemplateModelTestItem'; $schema = RedBeanModelToTableSchemaAdapter::resolve($modelClassName, static::$messageLogger); $this->assertNotEmpty($schema); $this->assertEquals($expectedSchema, $schema); }