public static function resolve($modelClassName) { $canHaveBeenParentModelClassName = static::resolveParentThatCanHaveBeen($modelClassName); if (!$canHaveBeenParentModelClassName) { return null; } $column = RedBeanModelMemberToColumnUtil::resolveForeignKeyColumnMetadata(null, $canHaveBeenParentModelClassName); return $column; }
public static function resolve($mixinModelClassName) { $column = null; if (!empty($mixinModelClassName) && @class_exists($mixinModelClassName) && $mixinModelClassName::getCanHaveBean()) { $column = RedBeanModelMemberToColumnUtil::resolveForeignKeyColumnMetadata(null, $mixinModelClassName); return $column; } return $column; }
/** * @depends testResolveForeignKeyColumnMetadataWithName */ public function testResolveForeignKeyColumnMetadataWithRelatedModelClassName() { $relatedModelClassName = "EmailTemplate"; $columnDefinition = RedBeanModelMemberToColumnUtil::resolveForeignKeyColumnMetadata(null, $relatedModelClassName); $this->assertNotEmpty($columnDefinition); $this->assertCount(6, $columnDefinition); $this->assertArrayHasKey('name', $columnDefinition); $this->assertEquals('emailtemplate_id', $columnDefinition['name']); $this->assertArrayHasKey('type', $columnDefinition); $this->assertEquals('INT(11)', $columnDefinition['type']); $this->assertArrayHasKey('unsigned', $columnDefinition); $this->assertEquals('UNSIGNED', $columnDefinition['unsigned']); $this->assertArrayHasKey('notNull', $columnDefinition); $this->assertEquals('NULL', $columnDefinition['notNull']); // Not Coding Standard $this->assertArrayHasKey('collation', $columnDefinition); $this->assertNull($columnDefinition['collation']); $this->assertArrayHasKey('default', $columnDefinition); $this->assertEquals('DEFAULT NULL', $columnDefinition['default']); // Not Coding Standard $this->assertArrayNotHasKey('length', $columnDefinition); }
/** * Generates junction table for a MANY_MANY relationship * @param string $modelClassName * @param array $relationMetadata * @param $messageLogger */ public static function resolve($modelClassName, array $relationMetadata, &$messageLogger) { if (empty($modelClassName) || !@class_exists($modelClassName) || empty($relationMetadata) || count($relationMetadata) < 2 || $relationMetadata[0] != RedBeanModel::MANY_MANY || !@class_exists($relationMetadata[1])) { return; } $relatedModelClassName = $relationMetadata[1]; $relationLinkName = null; if (isset($relationMetadata[4])) { $relationLinkName = $relationMetadata[4]; } $tableName = RedBeanManyToManyRelatedModels::getTableNameByModelClassNames($modelClassName, $relatedModelClassName, $relationLinkName); if (ProcessedTableCache::isProcessed($tableName, static::CACHE_KEY)) { return; } $columns = array(); $columns[] = RedBeanModelMemberToColumnUtil::resolveForeignKeyColumnMetadata(null, $modelClassName); $columns[] = RedBeanModelMemberToColumnUtil::resolveForeignKeyColumnMetadata(null, $relatedModelClassName); $indexes = static::resolveIndexesByColumnNames($columns); $schemaDefinition = array($tableName => array('columns' => $columns, 'indexes' => $indexes)); CreateOrUpdateExistingTableFromSchemaDefinitionArrayUtil::generateOrUpdateTableBySchemaDefinition($schemaDefinition, $messageLogger); ProcessedTableCache::setAsProcessed($tableName, static::CACHE_KEY); }
protected static function setColumnsForPolymorphicLink($relatedModelClassName, $linkName) { $columns = array(); $columns[] = RedBeanModelMemberToColumnUtil::resolveForeignKeyColumnMetadata(RedBeanModelMemberToColumnUtil::resolve($linkName) . '_id'); $columns[] = static::resolvePolymorphicTypeColumnByLinkName($linkName); $tableName = $relatedModelClassName::getTableName(); $polymorphicLinkColumns = GeneralCache::getEntry(static::CACHE_KEY, array()); $polymorphicLinkColumns[$tableName] = $columns; GeneralCache::cacheEntry(static::CACHE_KEY, $polymorphicLinkColumns); }