Merge pull request #978 from AntonStoeckl/embedded-empty-prefix
[DDC-2987] Enable empty prefixes for inlined embeddable
This commit is contained in:
commit
383604d4b8
@ -3158,6 +3158,7 @@ class ClassMetadataInfo implements ClassMetadata
|
|||||||
* Map Embedded Class
|
* Map Embedded Class
|
||||||
*
|
*
|
||||||
* @param array $mapping
|
* @param array $mapping
|
||||||
|
* @throws MappingException
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function mapEmbedded(array $mapping)
|
public function mapEmbedded(array $mapping)
|
||||||
@ -3187,9 +3188,17 @@ class ClassMetadataInfo implements ClassMetadata
|
|||||||
$fieldMapping['originalField'] = $fieldMapping['fieldName'];
|
$fieldMapping['originalField'] = $fieldMapping['fieldName'];
|
||||||
$fieldMapping['fieldName'] = $property . "." . $fieldMapping['fieldName'];
|
$fieldMapping['fieldName'] = $property . "." . $fieldMapping['fieldName'];
|
||||||
|
|
||||||
$fieldMapping['columnName'] = ! empty($this->embeddedClasses[$property]['columnPrefix'])
|
if (! empty($this->embeddedClasses[$property]['columnPrefix'])) {
|
||||||
? $this->embeddedClasses[$property]['columnPrefix'] . $fieldMapping['columnName']
|
$fieldMapping['columnName'] = $this->embeddedClasses[$property]['columnPrefix'] . $fieldMapping['columnName'];
|
||||||
: $this->namingStrategy->embeddedFieldToColumnName($property, $fieldMapping['columnName'], $this->reflClass->name, $embeddable->reflClass->name);
|
} elseif ($this->embeddedClasses[$property]['columnPrefix'] !== false) {
|
||||||
|
$fieldMapping['columnName'] = $this->namingStrategy
|
||||||
|
->embeddedFieldToColumnName(
|
||||||
|
$property,
|
||||||
|
$fieldMapping['columnName'],
|
||||||
|
$this->reflClass->name,
|
||||||
|
$embeddable->reflClass->name
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
$this->mapField($fieldMapping);
|
$this->mapField($fieldMapping);
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ final class Embedded implements Annotation
|
|||||||
public $class;
|
public $class;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string
|
* @var mixed
|
||||||
*/
|
*/
|
||||||
public $columnPrefix;
|
public $columnPrefix;
|
||||||
}
|
}
|
||||||
|
@ -179,8 +179,42 @@ class ValueObjectsTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC93PhoneNumber')
|
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC93PhoneNumber')
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testInlineEmbeddableWithPrefix()
|
||||||
|
{
|
||||||
|
$expectedColumnName = 'foobar_id';
|
||||||
|
|
||||||
|
$actualColumnName = $this->_em
|
||||||
|
->getClassMetadata(__NAMESPACE__ . '\DDC3028PersonWithPrefix')
|
||||||
|
->getColumnName('id.id');
|
||||||
|
|
||||||
|
$this->assertEquals($expectedColumnName, $actualColumnName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testInlineEmbeddableEmptyPrefix()
|
||||||
|
{
|
||||||
|
$expectedColumnName = 'id_id';
|
||||||
|
|
||||||
|
$actualColumnName = $this->_em
|
||||||
|
->getClassMetadata(__NAMESPACE__ . '\DDC3028PersonEmptyPrefix')
|
||||||
|
->getColumnName('id.id');
|
||||||
|
|
||||||
|
$this->assertEquals($expectedColumnName, $actualColumnName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testInlineEmbeddablePrefixFalse()
|
||||||
|
{
|
||||||
|
$expectedColumnName = 'id';
|
||||||
|
|
||||||
|
$actualColumnName = $this->_em
|
||||||
|
->getClassMetadata(__NAMESPACE__ . '\DDC3028PersonPrefixFalse')
|
||||||
|
->getColumnName('id.id');
|
||||||
|
|
||||||
|
$this->assertEquals($expectedColumnName, $actualColumnName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Entity
|
* @Entity
|
||||||
*/
|
*/
|
||||||
@ -296,3 +330,69 @@ class DDC93ContactInfo
|
|||||||
/** @Embedded(class = "DDC93Address") */
|
/** @Embedded(class = "DDC93Address") */
|
||||||
private $address;
|
private $address;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Entity
|
||||||
|
*/
|
||||||
|
class DDC3028PersonWithPrefix
|
||||||
|
{
|
||||||
|
const CLASSNAME = __CLASS__;
|
||||||
|
|
||||||
|
/** @Embedded(class="DDC3028Id", columnPrefix = "foobar_") */
|
||||||
|
public $id;
|
||||||
|
|
||||||
|
public function __construct(DDC3028Id $id = null)
|
||||||
|
{
|
||||||
|
$this->id = $id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Entity
|
||||||
|
*/
|
||||||
|
class DDC3028PersonEmptyPrefix
|
||||||
|
{
|
||||||
|
const CLASSNAME = __CLASS__;
|
||||||
|
|
||||||
|
/** @Embedded(class="DDC3028Id", columnPrefix = "") */
|
||||||
|
public $id;
|
||||||
|
|
||||||
|
public function __construct(DDC3028Id $id = null)
|
||||||
|
{
|
||||||
|
$this->id = $id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Entity
|
||||||
|
*/
|
||||||
|
class DDC3028PersonPrefixFalse
|
||||||
|
{
|
||||||
|
const CLASSNAME = __CLASS__;
|
||||||
|
|
||||||
|
/** @Embedded(class="DDC3028Id", columnPrefix = false) */
|
||||||
|
public $id;
|
||||||
|
|
||||||
|
public function __construct(DDC3028Id $id = null)
|
||||||
|
{
|
||||||
|
$this->id = $id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Embeddable
|
||||||
|
*/
|
||||||
|
class DDC3028Id
|
||||||
|
{
|
||||||
|
const CLASSNAME = __CLASS__;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Id @Column(type="string")
|
||||||
|
*/
|
||||||
|
public $id;
|
||||||
|
|
||||||
|
public function __construct($id = null)
|
||||||
|
{
|
||||||
|
$this->id = $id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user