/** * @depends testResolveForAChildThatShouldNotHaveParentForeignKey */ public function testResolveForAChildThatShouldHaveParentForeignKey() { $childClass = "AutoresponderItemActivity"; $parentColumnDefinition = RedBeanModelChildParentRelationshipToColumnAdapter::resolve($childClass); $this->assertNotNull($parentColumnDefinition); $this->assertNotEmpty($parentColumnDefinition); $this->assertCount(6, $parentColumnDefinition); $this->assertArrayHasKey('name', $parentColumnDefinition); $this->assertEquals('emailmessageactivity_id', $parentColumnDefinition['name']); $this->assertArrayHasKey('type', $parentColumnDefinition); $this->assertEquals('INT(11)', $parentColumnDefinition['type']); $this->assertArrayHasKey('unsigned', $parentColumnDefinition); $this->assertEquals('UNSIGNED', $parentColumnDefinition['unsigned']); $this->assertArrayHasKey('notNull', $parentColumnDefinition); $this->assertEquals('NULL', $parentColumnDefinition['notNull']); // Not Coding Standard $this->assertArrayHasKey('collation', $parentColumnDefinition); $this->assertNull($parentColumnDefinition['collation']); $this->assertArrayHasKey('default', $parentColumnDefinition); $this->assertEquals('DEFAULT NULL', $parentColumnDefinition['default']); // Not Coding Standard $this->assertArrayNotHasKey('length', $parentColumnDefinition); }
/** * Generates Table schema for a model class using its metadata of members, relations, mixins and indexes. * @param string $modelClassName * @param $messageLogger * @return array|bool */ public static function resolve($modelClassName, &$messageLogger) { if (empty($modelClassName) || !@class_exists($modelClassName) || !$modelClassName::getCanHaveBean()) { return false; } $metadata = $modelClassName::getMetadata(); $modelMetadata = array(); if (isset($metadata[$modelClassName])) { $modelMetadata = $metadata[$modelClassName]; } $memberColumns = array(); $relationColumns = array(); $indexes = array(); $uniqueIndexesFromValidators = array(); $parentColumnName = null; if (isset($modelMetadata['members'])) { if (!isset($modelMetadata['rules'])) { $errorMessage = Zurmo::t('Core', '{{model}} must have both, members and rules, set.', array('{{model}}' => $modelClassName)); $messageLogger->addErrorMessage($errorMessage); throw new CException($errorMessage); } $memberColumns = RedBeanModelMemberRulesToColumnsAdapter::resolve($modelClassName, $modelMetadata['members'], $modelMetadata['rules'], $messageLogger); $uniqueIndexesFromValidators = RedBeanModelMemberRulesToColumnAdapter::resolveUniqueIndexesFromValidator($modelClassName); } if (isset($modelMetadata['relations'])) { $relationColumns = RedBeanModelRelationsToColumnsAdapter::resolve($modelClassName, $modelMetadata['relations'], $messageLogger); } if (isset($modelMetadata['indexes']) || !empty($uniqueIndexesFromValidators)) { $indexesMetadata = $uniqueIndexesFromValidators; if (!empty($modelMetadata['indexes'])) { if (!empty($indexesMetadata)) { $indexesMetadata = CMap::mergeArray($indexesMetadata, $modelMetadata['indexes']); } else { $indexesMetadata = $modelMetadata['indexes']; } } if (!empty($indexesMetadata)) { $indexes = RedBeanModelMemberIndexesMetadataAdapter::resolve($modelClassName, $indexesMetadata, $messageLogger); } } $parentColumnName = RedBeanModelChildParentRelationshipToColumnAdapter::resolve($modelClassName); if ($parentColumnName) { $memberColumns[] = $parentColumnName; } $mixinColumns = RedBeanModelMixinsToColumnsAdapter::resolve($modelClassName, $messageLogger); $columns = CMap::mergeArray($memberColumns, $mixinColumns, $relationColumns); $tableName = $modelClassName::getTableName(); $schemaDefinition = array($tableName => array('columns' => $columns, 'indexes' => $indexes)); return $schemaDefinition; }