public function handle(array $row) { if ($this->first) { // skip first line $this->first = false; return true; } foreach ($this->columnConfig as $column => $relations) { $value = null; if (isset($relations['value'])) { $value = $relations['value']; } else { $value = $row[$column]; } if ($value === null) { continue; //no value } if ($relations['type'] === 'ROOT') { $this->dao->getNode($value); } else { $belongsToName = $row[$relations['belongsTo']]; if ($belongsToName === null) { continue; } // No node to attach this relation to. $parent = $this->dao->getNode($belongsToName); $property = $this->dao->getPropertyById($relations['type']); $relationValue = null; if ($property->getDataType() == 'node') { $relationValue = $this->dao->getNode($value); $this->dao->createNodeRelation($parent, $relationValue, $property); } else { if ($property->getDataType() == 'geometry') { // TODO } else { $converter = StringConverter::getConverter($property->getDatatype()); $relationValue = $converter->toObject($value); $relationValue = $converter->toString($relationValue); $relation = new Relation($parent, $property, $relationValue); $this->dao->addRelation($relation); } } } } $this->dao->limitCache(); return true; }
<?php use Doctrine\DBAL\Types\Type; use MyApp\Values\RenderableValue; use Symfony\Component\HttpFoundation\Request; Type::addType('tsvector', 'Utils\\Database\\Types\\Tsvector'); Type::addType('geometry', 'Utils\\Database\\Types\\Geometry'); $app->register(new \Silex\Provider\UrlGeneratorServiceProvider()); $app->register(new Utils\Services\Mapping\MappingServiceProvider()); $app['mapping.manager']->onRegister(function ($type, $mapping) { \MyApp\Converters\StringConverter::addConverter($type, $mapping->getDbConverter()); }); $app['mapping.manager']->register('text', function ($app) { return new \MyApp\FormTypes\TextType(); }, new \MyApp\Converters\TextConverter()); $app['mapping.manager']->register('year_period', function ($app) { return new \MyApp\FormTypes\YearPeriodType(); }, new \MyApp\Converters\YearPeriodConverter()); $app['mapping.manager']->register('node', function ($app) { return new \MyApp\FormTypes\NodeType($app, true); }, new \MyApp\Converters\EntityConverter()); $app['mapping.manager']->register('geometry', function ($app) { return new \MyApp\FormTypes\GeometryType($app, true); }, new \MyApp\Converters\EntityConverter()); $app['mapping.manager']->register('date', function ($app) { return null; // TODO }, new \MyApp\Converters\DateConverter()); $app['mapping.manager']->register('link', function ($app) { return new \MyApp\FormTypes\LinkType(); }, new \MyApp\Converters\LinkConverter());
function getValue() { /* * Smelly code is smelly, but embeddings do not support cross-table fields yet */ if ($this->valueObject !== null) { return $this->valueObject; } $type = $this->property->getDataType(); if ($type == 'node') { $this->valueObject = $this->nodevalue; } elseif ($type == 'geometry') { $this->valueObject = $this->geometryvalue; } else { $converter = StringConverter::getConverter($this->property->getDataType()); $this->valueObject = $converter->toObject($this->value); } return $this->valueObject; }