Skip to content

Commit

Permalink
Merge pull request #258 from FlipEverything/alias_mapping_bug
Browse files Browse the repository at this point in the history
Fix for alias mapping bug
  • Loading branch information
vlucas authored Jan 18, 2018
2 parents dc7613a + 4e5536e commit a2787a4
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 5 deletions.
6 changes: 1 addition & 5 deletions lib/Mapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -1011,14 +1011,10 @@ public function convertToPHPValues($entityName, array $data)
{
$phpData = [];
$fields = $entityName::fields();
$fieldAliasMappings = $this->entityManager()->fieldAliasMappings();
$platform = $this->connection()->getDatabasePlatform();
$data = $this->resolver()->dataWithOutFieldAliasMappings($data);
$entityData = array_intersect_key($data, $fields);
foreach ($data as $field => $value) {
if ($fieldAlias = array_search($field, $fieldAliasMappings)) {
$field = $fieldAlias;
}

// Field is in the Entity definitions
if (isset($entityData[$field])) {
$typeHandler = Type::getType($fields[$field]['type']);
Expand Down
17 changes: 17 additions & 0 deletions lib/Query/Resolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,23 @@ public function dataWithFieldAliasMappings(array $data)
return $fieldMappings;
}

/**
* Taken given aliased field name/value inputs and map them to their non-aliased names
*/
public function dataWithOutFieldAliasMappings(array $data)
{
// have to call fields() otherwise fieldAliasMappings() would return null on the first entity
$this->mapper->entityManager()->fields();
$fieldAliasMappings = $this->mapper->entityManager()->fieldAliasMappings();
foreach ($fieldAliasMappings as $field => $aliasedField) {
if (array_key_exists($aliasedField, $data)) {
$data[$field] = $data[$aliasedField];
unset($data[$aliasedField]);
}
}
return $data;
}

/**
* Execute provided query and return result
*
Expand Down
2 changes: 2 additions & 0 deletions tests/Entity/Legacy.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ public static function fields()
'name' => ['type' => 'string', 'required' => true, 'column' => self::getNameFieldColumnName()],
'number' => ['type' => 'integer', 'required' => true, 'column' => self::getNumberFieldColumnName()],
'date_created' => ['type' => 'datetime', 'value' => new \DateTime(), 'column' => self::getDateCreatedColumnName()],
'array' => ['type' => 'array', 'required' => false],
'arrayAliased'=> ['type' => 'array', 'required' => false, 'column' => 'array_aliased']
];
}

Expand Down
21 changes: 21 additions & 0 deletions tests/FieldAlias.php
Original file line number Diff line number Diff line change
Expand Up @@ -143,4 +143,25 @@ public function testLegacyRelations(Legacy $legacy)
$this->assertInstanceOf('Spot\Relation\HasMany', $legacy->polymorphic_comments);
$this->assertEquals(count($legacy->polymorphic_comments), 1);
}

public function testFieldAliasMapping() {
$testId = 2545;
$testArray = ['testKey' => 'testValue'];

$legacy = new Legacy();
$legacy->id = $testId;
$legacy->name = 'Something Here';
$legacy->number = 5;
$legacy->array = $testArray;
$legacy->arrayAliased = $testArray;

$mapper = test_spot_mapper('SpotTest\Entity\Legacy');
$mapper->save($legacy);

unset($legacy);
$legacy = $mapper->get($testId);

$this->assertEquals($testArray, $legacy->array);
$this->assertEquals($testArray, $legacy->arrayAliased);
}
}

0 comments on commit a2787a4

Please sign in to comment.