[DDC-193] Fixed.
This commit is contained in:
parent
5381e3d5a4
commit
7cc56c45d3
@ -46,7 +46,7 @@ Prefer PHP default values, if possible.
|
||||
|
||||
## Partial Objects
|
||||
|
||||
xxx
|
||||
[TBD: New syntax, results, etc.]
|
||||
|
||||
## XML Mapping Driver
|
||||
|
||||
|
@ -217,7 +217,7 @@
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="order-by-field">
|
||||
<xs:attribute name="field" type="XS:NMTOKEN" use="required" />
|
||||
<xs:attribute name="name" type="xs:NMTOKEN" use="required" />
|
||||
<xs:attribute name="direction" type="orm:order-by-direction" default="ASC" />
|
||||
</xs:complexType>
|
||||
|
||||
@ -237,6 +237,7 @@
|
||||
<xs:attribute name="target-entity" type="xs:NMTOKEN" use="required" />
|
||||
<xs:attribute name="field" type="xs:NMTOKEN" use="required" />
|
||||
<xs:attribute name="mapped-by" type="xs:NMTOKEN" />
|
||||
<xs:attribute name="inversed-by" type="xs:NMTOKEN" />
|
||||
<xs:attribute name="fetch" type="orm:fetch-type" default="LAZY" />
|
||||
</xs:complexType>
|
||||
|
||||
@ -246,7 +247,7 @@
|
||||
<xs:element name="order-by" type="orm:order-by" minOccurs="0" />
|
||||
</xs:sequence>
|
||||
<xs:attribute name="target-entity" type="xs:NMTOKEN" use="required" />
|
||||
<xs:attribute name="mapped-by" type="xs:NMTOKEN" />
|
||||
<xs:attribute name="mapped-by" type="xs:NMTOKEN" use="required" />
|
||||
<xs:attribute name="field" type="xs:NMTOKEN" use="required" />
|
||||
<xs:attribute name="orphan-removal" type="xs:boolean" default="false" />
|
||||
<xs:attribute name="fetch" type="orm:fetch-type" default="LAZY" />
|
||||
@ -264,6 +265,7 @@
|
||||
<xs:attribute name="field" type="xs:NMTOKEN" use="required" />
|
||||
<xs:attribute name="orphan-removal" type="xs:boolean" default="false" />
|
||||
<xs:attribute name="fetch" type="orm:fetch-type" default="LAZY" />
|
||||
<xs:attribute name="inversed-by" type="xs:NMTOKEN" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="one-to-one">
|
||||
@ -274,9 +276,10 @@
|
||||
<xs:element name="join-columns" type="orm:join-columns"/>
|
||||
</xs:choice>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="field" type="xs:NMTOKEN" use="required" />
|
||||
<xs:attribute name="target-entity" type="xs:NMTOKEN" use="required" />
|
||||
<xs:attribute name="mapped-by" type="xs:NMTOKEN" />
|
||||
<xs:attribute name="field" type="xs:NMTOKEN" use="required" />
|
||||
<xs:attribute name="inversed-by" type="xs:NMTOKEN" />
|
||||
<xs:attribute name="orphan-removal" type="xs:boolean" default="false" />
|
||||
<xs:attribute name="fetch" type="orm:fetch-type" default="LAZY" />
|
||||
</xs:complexType>
|
||||
|
@ -26,7 +26,7 @@ namespace Doctrine\Common;
|
||||
*
|
||||
* This class contains no event data. It is used by events that do not pass state
|
||||
* information to an event handler when an event is raised. The single empty EventArgs
|
||||
* instance can be obtained through {@link getEmptyInstance()}.
|
||||
* instance can be obtained through {@link getEmptyInstance}.
|
||||
*
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link www.doctrine-project.org
|
||||
|
@ -16,7 +16,7 @@
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.org>.
|
||||
* <http://www.doctrine-project.org>.
|
||||
*/
|
||||
|
||||
namespace Doctrine\Common;
|
||||
@ -24,13 +24,12 @@ namespace Doctrine\Common;
|
||||
/**
|
||||
* An EventSubscriber knows himself what events he is interested in.
|
||||
* If an EventSubscriber is added to an EventManager, the manager invokes
|
||||
* getSubscribedEvents() and registers the subscriber as a listener for all
|
||||
* {@link getSubscribedEvents} and registers the subscriber as a listener for all
|
||||
* returned events.
|
||||
*
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link www.doctrine-project.org
|
||||
* @since 2.0
|
||||
* @version $Revision: 3938 $
|
||||
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
|
||||
* @author Jonathan Wage <jonwage@gmail.com>
|
||||
* @author Roman Borschel <roman@code-factory.org>
|
||||
@ -38,7 +37,7 @@ namespace Doctrine\Common;
|
||||
interface EventSubscriber
|
||||
{
|
||||
/**
|
||||
* Returns an array of events that this subscriber listens
|
||||
* Returns an array of events this subscriber wants to listen to.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
|
@ -87,8 +87,8 @@ class ObjectHydrator extends AbstractHydrator
|
||||
if ($assoc->mappedBy) {
|
||||
$this->_hints['fetched'][$className][$assoc->mappedBy] = true;
|
||||
} else {
|
||||
if (isset($class->inverseMappings[$sourceClassName][$assoc->sourceFieldName])) {
|
||||
$inverseAssoc = $class->inverseMappings[$sourceClassName][$assoc->sourceFieldName];
|
||||
if ($assoc->inversedBy) {
|
||||
$inverseAssoc = $class->associationMappings[$assoc->inversedBy];
|
||||
if ($inverseAssoc->isOneToOne()) {
|
||||
$this->_hints['fetched'][$className][$inverseAssoc->sourceFieldName] = true;
|
||||
if ($class->subClasses) {
|
||||
@ -346,9 +346,10 @@ class ObjectHydrator extends AbstractHydrator
|
||||
$this->_uow->setOriginalEntityProperty($oid, $relationField, $element);
|
||||
$targetClass = $this->_ce[$relation->targetEntityName];
|
||||
if ($relation->isOwningSide) {
|
||||
//TODO: Just check hints['fetched'] here?
|
||||
// If there is an inverse mapping on the target class its bidirectional
|
||||
if (isset($targetClass->inverseMappings[$relation->sourceEntityName][$relationField])) {
|
||||
$inverseAssoc = $targetClass->inverseMappings[$relation->sourceEntityName][$relationField];
|
||||
if ($relation->inversedBy) {
|
||||
$inverseAssoc = $targetClass->associationMappings[$relation->inversedBy];
|
||||
if ($inverseAssoc->isOneToOne()) {
|
||||
$targetClass->reflFields[$inverseAssoc->sourceFieldName]->setValue($element, $parentObject);
|
||||
$this->_uow->setOriginalEntityProperty(spl_object_hash($element), $inverseAssoc->sourceFieldName, $parentObject);
|
||||
|
@ -315,7 +315,6 @@ class ClassMetadata extends ClassMetadataInfo
|
||||
'idGenerator', //TODO: Does not really need to be serialized. Could be moved to runtime.
|
||||
'inheritanceType',
|
||||
'inheritedAssociationFields',
|
||||
'inverseMappings', //TODO: Remove! DDC-193
|
||||
'isIdentifierComposite',
|
||||
'isMappedSuperclass',
|
||||
'isVersioned',
|
||||
|
@ -127,9 +127,9 @@ class ClassMetadataInfo
|
||||
public $namespace;
|
||||
|
||||
/**
|
||||
* READ-ONLY: The name of the entity class that is at the root of the entity inheritance
|
||||
* hierarchy. If the entity is not part of an inheritance hierarchy this is the same
|
||||
* as $_entityName.
|
||||
* READ-ONLY: The name of the entity class that is at the root of the mapped entity inheritance
|
||||
* hierarchy. If the entity is not part of a mapped inheritance hierarchy this is the same
|
||||
* as {@link $entityName}.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
@ -312,14 +312,6 @@ class ClassMetadataInfo
|
||||
*/
|
||||
public $associationMappings = array();
|
||||
|
||||
/**
|
||||
* READ-ONLY: List of inverse association mappings, indexed by mappedBy field name.
|
||||
*
|
||||
* @var array
|
||||
* @todo Remove! See http://www.doctrine-project.org/jira/browse/DDC-193
|
||||
*/
|
||||
public $inverseMappings = array();
|
||||
|
||||
/**
|
||||
* READ-ONLY: Flag indicating whether the identifier/primary key of the class is composite.
|
||||
*
|
||||
@ -531,34 +523,6 @@ class ClassMetadataInfo
|
||||
return $this->associationMappings[$fieldName];
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the inverse association mapping for the given target class name and
|
||||
* owning fieldname.
|
||||
*
|
||||
* @param string $mappedByFieldName The field on the
|
||||
* @return Doctrine\ORM\Mapping\AssociationMapping The mapping or NULL if there is no such
|
||||
* inverse association mapping.
|
||||
*/
|
||||
public function getInverseAssociationMapping($targetClassName, $mappedByFieldName)
|
||||
{
|
||||
return isset($this->inverseMappings[$targetClassName][$mappedByFieldName]) ?
|
||||
$this->inverseMappings[$targetClassName][$mappedByFieldName] : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the class has an inverse association mapping that points to the
|
||||
* specified class and ha the specified mappedBy field.
|
||||
*
|
||||
* @param string $targetClassName The name of the target class.
|
||||
* @param string $mappedByFieldName The name of the mappedBy field that points to the field on
|
||||
* the target class that owns the association.
|
||||
* @return boolean
|
||||
*/
|
||||
public function hasInverseAssociationMapping($targetClassName, $mappedByFieldName)
|
||||
{
|
||||
return isset($this->inverseMappings[$targetClassName][$mappedByFieldName]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all association mappings of the class.
|
||||
*
|
||||
@ -1063,7 +1027,6 @@ class ClassMetadataInfo
|
||||
if ($owningClassName !== null) {
|
||||
$this->inheritedAssociationFields[$sourceFieldName] = $owningClassName;
|
||||
}
|
||||
$this->_registerMappingIfInverse($mapping);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1093,20 +1056,6 @@ class ClassMetadataInfo
|
||||
$this->_storeAssociationMapping($oneToOneMapping);
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers the mapping as an inverse mapping, if it is a mapping on the
|
||||
* inverse side of an association mapping.
|
||||
*
|
||||
* @param AssociationMapping The mapping to register as inverse if it is a mapping
|
||||
* for the inverse side of an association.
|
||||
*/
|
||||
private function _registerMappingIfInverse(AssociationMapping $assoc)
|
||||
{
|
||||
if ( ! $assoc->isOwningSide) {
|
||||
$this->inverseMappings[$assoc->targetEntityName][$assoc->mappedBy] = $assoc;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a one-to-many mapping.
|
||||
*
|
||||
@ -1154,7 +1103,6 @@ class ClassMetadataInfo
|
||||
throw MappingException::duplicateFieldMapping($this->name, $sourceFieldName);
|
||||
}
|
||||
$this->associationMappings[$sourceFieldName] = $assocMapping;
|
||||
$this->_registerMappingIfInverse($assocMapping);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -55,7 +55,7 @@ abstract class AbstractFileDriver implements Driver
|
||||
* @var string
|
||||
*/
|
||||
protected $_fileExtension;
|
||||
|
||||
|
||||
/**
|
||||
* Initializes a new FileDriver that looks in the given path(s) for mapping
|
||||
* documents and operates in the specified operating mode.
|
||||
@ -76,7 +76,7 @@ abstract class AbstractFileDriver implements Driver
|
||||
{
|
||||
$this->_paths = array_unique(array_merge($this->_paths, $paths));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieve the defined metadata lookup paths.
|
||||
*
|
||||
@ -107,7 +107,7 @@ abstract class AbstractFileDriver implements Driver
|
||||
{
|
||||
$this->_fileExtension = $fileExtension;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the element of schema meta data for the class from the mapping file.
|
||||
* This will lazily load the mapping file if it is not loaded yet
|
||||
@ -132,7 +132,7 @@ abstract class AbstractFileDriver implements Driver
|
||||
public function isTransient($className)
|
||||
{
|
||||
$fileName = str_replace('\\', '.', $className) . $this->_fileExtension;
|
||||
|
||||
|
||||
// Check whether file exists
|
||||
foreach ((array) $this->_paths as $path) {
|
||||
if (file_exists($path . DIRECTORY_SEPARATOR . $fileName)) {
|
||||
@ -142,7 +142,7 @@ abstract class AbstractFileDriver implements Driver
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets the names of all mapped classes known to this driver.
|
||||
*
|
||||
@ -151,7 +151,7 @@ abstract class AbstractFileDriver implements Driver
|
||||
public function getAllClassNames()
|
||||
{
|
||||
$classes = array();
|
||||
|
||||
|
||||
if ($this->_paths) {
|
||||
foreach ((array) $this->_paths as $path) {
|
||||
if ( ! is_dir($path)) {
|
||||
|
@ -173,7 +173,7 @@ class AnnotationDriver implements Driver
|
||||
// Evaluate InheritanceType annotation
|
||||
if (isset($classAnnotations['Doctrine\ORM\Mapping\InheritanceType'])) {
|
||||
$inheritanceTypeAnnot = $classAnnotations['Doctrine\ORM\Mapping\InheritanceType'];
|
||||
$metadata->setInheritanceType(constant('\Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_' . $inheritanceTypeAnnot->value));
|
||||
$metadata->setInheritanceType(constant('Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_' . $inheritanceTypeAnnot->value));
|
||||
}
|
||||
|
||||
// Evaluate DiscriminatorColumn annotation
|
||||
@ -195,7 +195,7 @@ class AnnotationDriver implements Driver
|
||||
// Evaluate DoctrineChangeTrackingPolicy annotation
|
||||
if (isset($classAnnotations['Doctrine\ORM\Mapping\ChangeTrackingPolicy'])) {
|
||||
$changeTrackingAnnot = $classAnnotations['Doctrine\ORM\Mapping\ChangeTrackingPolicy'];
|
||||
$metadata->setChangeTrackingPolicy(constant('\Doctrine\ORM\Mapping\ClassMetadata::CHANGETRACKING_' . $changeTrackingAnnot->value));
|
||||
$metadata->setChangeTrackingPolicy(constant('Doctrine\ORM\Mapping\ClassMetadata::CHANGETRACKING_' . $changeTrackingAnnot->value));
|
||||
}
|
||||
|
||||
// Evaluate annotations on properties/fields
|
||||
|
@ -29,7 +29,7 @@ use Doctrine\Common\Cache\ArrayCache,
|
||||
Doctrine\Common\Util\Inflector;
|
||||
|
||||
/**
|
||||
* The DatabaseDriver reverse engineers the mapping metadata from a database
|
||||
* The DatabaseDriver reverse engineers the mapping metadata from a database.
|
||||
*
|
||||
* @license http://www.opensource.org/licenses/lgpl-license.php LGPL
|
||||
* @link www.doctrine-project.org
|
||||
@ -67,7 +67,7 @@ class DatabaseDriver implements Driver
|
||||
|
||||
$columns = $this->_sm->listTableColumns($tableName);
|
||||
|
||||
if($this->_sm->getDatabasePlatform()->supportsForeignKeyConstraints()) {
|
||||
if ($this->_sm->getDatabasePlatform()->supportsForeignKeyConstraints()) {
|
||||
$foreignKeys = $this->_sm->listTableForeignKeys($tableName);
|
||||
} else {
|
||||
$foreignKeys = array();
|
||||
|
@ -37,7 +37,6 @@ final class DiscriminatorColumn extends Annotation {
|
||||
public $length;
|
||||
}
|
||||
final class DiscriminatorMap extends Annotation {}
|
||||
/*final class SubClasses extends Annotation {}*/
|
||||
final class Id extends Annotation {}
|
||||
final class GeneratedValue extends Annotation {
|
||||
public $strategy = 'AUTO';
|
||||
@ -124,7 +123,6 @@ final class SequenceGenerator extends Annotation {
|
||||
public $initialValue = 1;
|
||||
}
|
||||
final class ChangeTrackingPolicy extends Annotation {}
|
||||
|
||||
final class OrderBy extends Annotation {}
|
||||
|
||||
/* Annotations for lifecycle callbacks */
|
||||
|
@ -46,7 +46,7 @@ class DriverChain implements Driver
|
||||
private $_drivers = array();
|
||||
|
||||
/**
|
||||
* Add a nested driver
|
||||
* Add a nested driver.
|
||||
*
|
||||
* @param Driver $nestedDriver
|
||||
* @param string $namespace
|
||||
@ -57,7 +57,7 @@ class DriverChain implements Driver
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the array of nested drivers
|
||||
* Get the array of nested drivers.
|
||||
*
|
||||
* @return array $drivers
|
||||
*/
|
||||
@ -74,7 +74,7 @@ class DriverChain implements Driver
|
||||
*/
|
||||
public function loadMetadataForClass($className, ClassMetadataInfo $metadata)
|
||||
{
|
||||
foreach ($this->_drivers AS $namespace => $driver) {
|
||||
foreach ($this->_drivers as $namespace => $driver) {
|
||||
if (strpos($className, $namespace) === 0) {
|
||||
$driver->loadMetadataForClass($className, $metadata);
|
||||
return;
|
||||
|
@ -49,7 +49,6 @@ class PhpDriver extends AbstractFileDriver
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected $_fileExtension = '.php';
|
||||
|
||||
protected $_metadata;
|
||||
|
||||
/**
|
||||
|
@ -21,7 +21,8 @@
|
||||
|
||||
namespace Doctrine\ORM\Mapping\Driver;
|
||||
|
||||
use Doctrine\ORM\Mapping\ClassMetadataInfo,
|
||||
use SimpleXMLElement,
|
||||
Doctrine\ORM\Mapping\ClassMetadataInfo,
|
||||
Doctrine\ORM\Mapping\MappingException;
|
||||
|
||||
/**
|
||||
@ -226,6 +227,9 @@ class XmlDriver extends AbstractFileDriver
|
||||
if (isset($oneToOneElement['mapped-by'])) {
|
||||
$mapping['mappedBy'] = (string)$oneToOneElement['mapped-by'];
|
||||
} else {
|
||||
if (isset($oneToOneElement['inversed-by'])) {
|
||||
$mapping['inversedBy'] = (string)$oneToOneElement['inversed-by'];
|
||||
}
|
||||
$joinColumns = array();
|
||||
|
||||
if (isset($oneToOneElement->{'join-column'})) {
|
||||
@ -295,9 +299,13 @@ class XmlDriver extends AbstractFileDriver
|
||||
if (isset($manyToOneElement['fetch'])) {
|
||||
$mapping['fetch'] = constant('Doctrine\ORM\Mapping\AssociationMapping::FETCH_' . (string)$manyToOneElement['fetch']);
|
||||
}
|
||||
|
||||
|
||||
if (isset($manyToOneElement['inversed-by'])) {
|
||||
$mapping['inversedBy'] = (string)$manyToOneElement['inversed-by'];
|
||||
}
|
||||
|
||||
$joinColumns = array();
|
||||
|
||||
|
||||
if (isset($manyToOneElement->{'join-column'})) {
|
||||
$joinColumns[] = $this->_getJoinColumnMapping($manyToOneElement->{'join-column'});
|
||||
} else if (isset($manyToOneElement->{'join-columns'})) {
|
||||
@ -305,13 +313,12 @@ class XmlDriver extends AbstractFileDriver
|
||||
if (!isset($joinColumnElement['name'])) {
|
||||
$joinColumnElement['name'] = $name;
|
||||
}
|
||||
|
||||
$joinColumns[] = $this->_getJoinColumnMapping($joinColumnElement);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$mapping['joinColumns'] = $joinColumns;
|
||||
|
||||
|
||||
if (isset($manyToOneElement->cascade)) {
|
||||
$mapping['cascade'] = $this->_getCascadeMappings($manyToOneElement->cascade);
|
||||
}
|
||||
@ -339,11 +346,15 @@ class XmlDriver extends AbstractFileDriver
|
||||
if (isset($manyToManyElement['mapped-by'])) {
|
||||
$mapping['mappedBy'] = (string)$manyToManyElement['mapped-by'];
|
||||
} else if (isset($manyToManyElement->{'join-table'})) {
|
||||
if (isset($manyToManyElement['inversed-by'])) {
|
||||
$mapping['inversedBy'] = (string)$manyToManyElement['inversed-by'];
|
||||
}
|
||||
|
||||
$joinTableElement = $manyToManyElement->{'join-table'};
|
||||
$joinTable = array(
|
||||
'name' => (string)$joinTableElement['name']
|
||||
);
|
||||
|
||||
|
||||
if (isset($joinTableElement['schema'])) {
|
||||
$joinTable['schema'] = (string)$joinTableElement['schema'];
|
||||
}
|
||||
@ -382,7 +393,7 @@ class XmlDriver extends AbstractFileDriver
|
||||
// Evaluate <lifecycle-callbacks...>
|
||||
if (isset($xmlRoot->{'lifecycle-callbacks'})) {
|
||||
foreach ($xmlRoot->{'lifecycle-callbacks'}->{'lifecycle-callback'} as $lifecycleCallback) {
|
||||
$metadata->addLifecycleCallback((string)$lifecycleCallback['method'], constant('\Doctrine\ORM\Events::' . (string)$lifecycleCallback['type']));
|
||||
$metadata->addLifecycleCallback((string)$lifecycleCallback['method'], constant('Doctrine\ORM\Events::' . (string)$lifecycleCallback['type']));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -394,7 +405,7 @@ class XmlDriver extends AbstractFileDriver
|
||||
* @param $joinColumnElement The XML element.
|
||||
* @return array The mapping array.
|
||||
*/
|
||||
private function _getJoinColumnMapping(\SimpleXMLElement $joinColumnElement)
|
||||
private function _getJoinColumnMapping(SimpleXMLElement $joinColumnElement)
|
||||
{
|
||||
$joinColumn = array(
|
||||
'name' => (string)$joinColumnElement['name'],
|
||||
|
@ -230,6 +230,10 @@ class YamlDriver extends AbstractFileDriver
|
||||
if (isset($oneToOneElement['mappedBy'])) {
|
||||
$mapping['mappedBy'] = $oneToOneElement['mappedBy'];
|
||||
} else {
|
||||
if (isset($oneToOneElement['inversedBy'])) {
|
||||
$mapping['inversedBy'] = $oneToOneElement['inversedBy'];
|
||||
}
|
||||
|
||||
$joinColumns = array();
|
||||
|
||||
if (isset($oneToOneElement['joinColumn'])) {
|
||||
@ -292,6 +296,10 @@ class YamlDriver extends AbstractFileDriver
|
||||
$mapping['fetch'] = constant('Doctrine\ORM\Mapping\AssociationMapping::FETCH_' . $manyToOneElement['fetch']);
|
||||
}
|
||||
|
||||
if (isset($manyToOneElement['inversedBy'])) {
|
||||
$mapping['inversedBy'] = $manyToOneElement['inversedBy'];
|
||||
}
|
||||
|
||||
$joinColumns = array();
|
||||
|
||||
if (isset($manyToOneElement['joinColumn'])) {
|
||||
@ -331,6 +339,10 @@ class YamlDriver extends AbstractFileDriver
|
||||
if (isset($manyToManyElement['mappedBy'])) {
|
||||
$mapping['mappedBy'] = $manyToManyElement['mappedBy'];
|
||||
} else if (isset($manyToManyElement['joinTable'])) {
|
||||
if (isset($manyToManyElement['inversedBy'])) {
|
||||
$mapping['inversedBy'] = $manyToManyElement['inversedBy'];
|
||||
}
|
||||
|
||||
$joinTableElement = $manyToManyElement['joinTable'];
|
||||
$joinTable = array(
|
||||
'name' => $joinTableElement['name']
|
||||
@ -375,7 +387,7 @@ class YamlDriver extends AbstractFileDriver
|
||||
if (isset($element['lifecycleCallbacks'])) {
|
||||
foreach ($element['lifecycleCallbacks'] as $type => $methods) {
|
||||
foreach ($methods as $method) {
|
||||
$metadata->addLifecycleCallback($method, constant('\Doctrine\ORM\Events::' . $type));
|
||||
$metadata->addLifecycleCallback($method, constant('Doctrine\ORM\Events::' . $type));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -70,10 +70,7 @@ class ManyToManyMapping extends AssociationMapping
|
||||
public $orderBy;
|
||||
|
||||
/**
|
||||
* Validates and completes the mapping.
|
||||
*
|
||||
* @param array $mapping
|
||||
* @override
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function _validateAndCompleteMapping(array $mapping)
|
||||
{
|
||||
@ -89,13 +86,15 @@ class ManyToManyMapping extends AssociationMapping
|
||||
'joinColumns' => array(
|
||||
array(
|
||||
'name' => $sourceShortName . '_id',
|
||||
'referencedColumnName' => 'id'
|
||||
'referencedColumnName' => 'id',
|
||||
'onDelete' => 'CASCADE'
|
||||
)
|
||||
),
|
||||
'inverseJoinColumns' => array(
|
||||
array(
|
||||
'name' => $targetShortName . '_id',
|
||||
'referencedColumnName' => 'id'
|
||||
'referencedColumnName' => 'id',
|
||||
'onDelete' => 'CASCADE'
|
||||
)
|
||||
)
|
||||
);
|
||||
@ -178,6 +177,7 @@ class ManyToManyMapping extends AssociationMapping
|
||||
$persister->loadManyToManyCollection($this, $joinTableConditions, $targetCollection);
|
||||
}
|
||||
|
||||
/** {@inheritdoc} */
|
||||
public function isManyToMany()
|
||||
{
|
||||
return true;
|
||||
|
@ -141,18 +141,14 @@ class OneToOneMapping extends AssociationMapping
|
||||
$targetClass = $em->getClassMetadata($this->targetEntityName);
|
||||
|
||||
if ($this->isOwningSide) {
|
||||
$inverseField = isset($targetClass->inverseMappings[$this->sourceEntityName][$this->sourceFieldName]) ?
|
||||
$targetClass->inverseMappings[$this->sourceEntityName][$this->sourceFieldName]->sourceFieldName
|
||||
: false;
|
||||
|
||||
// Mark inverse side as fetched in the hints, otherwise the UoW would
|
||||
// try to load it in a separate query (remember: to-one inverse sides can not be lazy).
|
||||
$hints = array();
|
||||
if ($inverseField) {
|
||||
$hints['fetched'][$targetClass->name][$inverseField] = true;
|
||||
if ($this->inversedBy) {
|
||||
$hints['fetched'][$targetClass->name][$this->inversedBy] = true;
|
||||
if ($targetClass->subClasses) {
|
||||
foreach ($targetClass->subClasses as $targetSubclassName) {
|
||||
$hints['fetched'][$targetSubclassName][$inverseField] = true;
|
||||
$hints['fetched'][$targetSubclassName][$this->inversedBy] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -164,8 +160,8 @@ class OneToOneMapping extends AssociationMapping
|
||||
|
||||
$targetEntity = $em->getUnitOfWork()->getEntityPersister($this->targetEntityName)->load($joinColumnValues, $targetEntity, $this, $hints);
|
||||
|
||||
if ($targetEntity !== null && $inverseField && ! $targetClass->isCollectionValuedAssociation($inverseField)) {
|
||||
$targetClass->reflFields[$inverseField]->setValue($targetEntity, $sourceEntity);
|
||||
if ($targetEntity !== null && $this->inversedBy && ! $targetClass->isCollectionValuedAssociation($this->inversedBy)) {
|
||||
$targetClass->reflFields[$this->inversedBy]->setValue($targetEntity, $sourceEntity);
|
||||
}
|
||||
} else {
|
||||
$conditions = array();
|
||||
|
@ -134,18 +134,7 @@ final class PersistentCollection implements Collection
|
||||
{
|
||||
$this->_owner = $entity;
|
||||
$this->_association = $assoc;
|
||||
|
||||
// Check for bidirectionality
|
||||
//$this->_backRefFieldName = $assoc->inversedBy ?: $assoc->mappedBy;
|
||||
if ( ! $assoc->isOwningSide) {
|
||||
// For sure bi-directional
|
||||
$this->_backRefFieldName = $assoc->mappedBy;
|
||||
} else {
|
||||
if (isset($this->_typeClass->inverseMappings[$assoc->sourceEntityName][$assoc->sourceFieldName])) {
|
||||
// Bi-directional
|
||||
$this->_backRefFieldName = $this->_typeClass->inverseMappings[$assoc->sourceEntityName][$assoc->sourceFieldName]->sourceFieldName;
|
||||
}
|
||||
}
|
||||
$this->_backRefFieldName = $assoc->inversedBy ?: $assoc->mappedBy;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -174,8 +163,8 @@ final class PersistentCollection implements Collection
|
||||
public function hydrateAdd($element)
|
||||
{
|
||||
$this->_coll->add($element);
|
||||
// If _backRefFieldName is set, then the association is bidirectional
|
||||
// and we need to set the back reference.
|
||||
// If _backRefFieldName is set and its a one-to-many association,
|
||||
// we need to set the back reference.
|
||||
if ($this->_backRefFieldName && $this->_association->isOneToMany()) {
|
||||
// Set back reference to owner
|
||||
$this->_typeClass->reflFields[$this->_backRefFieldName]
|
||||
|
@ -50,7 +50,7 @@ abstract class AbstractCollectionPersister
|
||||
protected $_uow;
|
||||
|
||||
/**
|
||||
* Initializes a new instance of a class derived from {@link AbstractCollectionPersister}.
|
||||
* Initializes a new instance of a class derived from AbstractCollectionPersister.
|
||||
*
|
||||
* @param Doctrine\ORM\EntityManager $em
|
||||
*/
|
||||
|
@ -492,8 +492,8 @@ class StandardEntityPersister
|
||||
if ($found = $this->_em->getUnitOfWork()->tryGetById($joinColumnValues, $targetClass->rootEntityName)) {
|
||||
$this->_class->reflFields[$field]->setValue($entity, $found);
|
||||
// Complete inverse side, if necessary.
|
||||
if (isset($targetClass->inverseMappings[$this->_class->name][$field])) {
|
||||
$inverseAssoc = $targetClass->inverseMappings[$this->_class->name][$field];
|
||||
if ($assoc->inversedBy) {
|
||||
$inverseAssoc = $targetClass->associationMappings[$assoc->inversedBy];
|
||||
$targetClass->reflFields[$inverseAssoc->sourceFieldName]->setValue($found, $entity);
|
||||
}
|
||||
$newData[$field] = $found;
|
||||
|
@ -1336,12 +1336,12 @@ class UnitOfWork implements PropertyChangedListener
|
||||
// We need to fetch the managed copy in order to merge.
|
||||
$managedCopy = $this->_em->find($class->name, $id);
|
||||
}
|
||||
|
||||
|
||||
if ($managedCopy === null) {
|
||||
throw new \InvalidArgumentException('New entity detected during merge.'
|
||||
. ' Persist the new entity before merging.');
|
||||
}
|
||||
|
||||
|
||||
if ($class->isVersioned) {
|
||||
$managedCopyVersion = $class->reflFields[$class->versionField]->getValue($managedCopy);
|
||||
$entityVersion = $class->reflFields[$class->versionField]->getValue($entity);
|
||||
@ -1350,7 +1350,7 @@ class UnitOfWork implements PropertyChangedListener
|
||||
throw OptimisticLockException::lockFailed();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Merge state of $entity into existing (managed) entity
|
||||
foreach ($class->reflFields as $name => $prop) {
|
||||
if ( ! isset($class->associationMappings[$name])) {
|
||||
@ -1359,7 +1359,7 @@ class UnitOfWork implements PropertyChangedListener
|
||||
$assoc2 = $class->associationMappings[$name];
|
||||
if ($assoc2->isOneToOne()) {
|
||||
if ( ! $assoc2->isCascadeMerge) {
|
||||
$other = $class->reflFields[$name]->getValue($entity);
|
||||
$other = $class->reflFields[$name]->getValue($entity); //TODO: Just $prop->getValue($entity)?
|
||||
if ($other !== null) {
|
||||
$targetClass = $this->_em->getClassMetadata($assoc2->targetEntityName);
|
||||
$id = $targetClass->getIdentifierValues($other);
|
||||
|
@ -13,23 +13,22 @@ class CmsAddress
|
||||
{
|
||||
/**
|
||||
* @Column(type="integer")
|
||||
* @Id
|
||||
* @GeneratedValue(strategy="AUTO")
|
||||
* @Id @GeneratedValue
|
||||
*/
|
||||
public $id;
|
||||
|
||||
/**
|
||||
* @Column(type="string", length=50)
|
||||
* @Column(length=50)
|
||||
*/
|
||||
public $country;
|
||||
|
||||
/**
|
||||
* @Column(type="string", length=50)
|
||||
* @Column(length=50)
|
||||
*/
|
||||
public $zip;
|
||||
|
||||
/**
|
||||
* @Column(type="string", length=50)
|
||||
* @Column(length=50)
|
||||
*/
|
||||
public $city;
|
||||
|
||||
@ -39,8 +38,7 @@ class CmsAddress
|
||||
public $street;
|
||||
|
||||
/**
|
||||
* @OneToOne(targetEntity="CmsUser")
|
||||
// * @JoinColumn(name="user_id", referencedColumnName="id")
|
||||
* @OneToOne(targetEntity="CmsUser", inversedBy="address")
|
||||
*/
|
||||
public $user;
|
||||
|
||||
|
@ -23,7 +23,7 @@ class CmsArticle
|
||||
*/
|
||||
public $text;
|
||||
/**
|
||||
* @ManyToOne(targetEntity="CmsUser")
|
||||
* @ManyToOne(targetEntity="CmsUser", inversedBy="articles")
|
||||
* @JoinColumn(name="user_id", referencedColumnName="id")
|
||||
*/
|
||||
public $user;
|
||||
|
@ -23,7 +23,7 @@ class CmsComment
|
||||
*/
|
||||
public $text;
|
||||
/**
|
||||
* @ManyToOne(targetEntity="CmsArticle")
|
||||
* @ManyToOne(targetEntity="CmsArticle", inversedBy="comments")
|
||||
* @JoinColumn(name="article_id", referencedColumnName="id")
|
||||
*/
|
||||
public $article;
|
||||
|
@ -14,12 +14,12 @@ class CmsEmployee
|
||||
/**
|
||||
* @Id
|
||||
* @Column(type="integer")
|
||||
* @GeneratedValue(strategy="AUTO")
|
||||
* @GeneratedValue
|
||||
*/
|
||||
private $id;
|
||||
|
||||
/**
|
||||
* @Column(type="string")
|
||||
* @Column
|
||||
*/
|
||||
private $name;
|
||||
|
||||
|
@ -18,11 +18,11 @@ class CmsGroup
|
||||
/**
|
||||
* @Id
|
||||
* @Column(type="integer")
|
||||
* @GeneratedValue(strategy="AUTO")
|
||||
* @GeneratedValue
|
||||
*/
|
||||
public $id;
|
||||
/**
|
||||
* @Column(type="string", length=50)
|
||||
* @Column(length=50)
|
||||
*/
|
||||
public $name;
|
||||
/**
|
||||
|
@ -9,11 +9,11 @@ namespace Doctrine\Tests\Models\CMS;
|
||||
class CmsPhonenumber
|
||||
{
|
||||
/**
|
||||
* @Id @Column(type="string", length=50)
|
||||
* @Id @Column(length=50)
|
||||
*/
|
||||
public $phonenumber;
|
||||
/**
|
||||
* @ManyToOne(targetEntity="CmsUser")
|
||||
* @ManyToOne(targetEntity="CmsUser", inversedBy="phonenumbers")
|
||||
* @JoinColumn(name="user_id", referencedColumnName="id")
|
||||
*/
|
||||
public $user;
|
||||
|
@ -40,7 +40,7 @@ class CmsUser
|
||||
*/
|
||||
public $address;
|
||||
/**
|
||||
* @ManyToMany(targetEntity="CmsGroup", cascade={"persist"})
|
||||
* @ManyToMany(targetEntity="CmsGroup", inversedBy="users", cascade={"persist"})
|
||||
* @JoinTable(name="cms_users_groups",
|
||||
* joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
|
||||
* inverseJoinColumns={@JoinColumn(name="group_id", referencedColumnName="id")}
|
||||
|
@ -11,12 +11,12 @@ namespace Doctrine\Tests\Models\Company;
|
||||
class CompanyEvent {
|
||||
/**
|
||||
* @Id @Column(type="integer")
|
||||
* @GeneratedValue(strategy="AUTO")
|
||||
* @GeneratedValue
|
||||
*/
|
||||
private $id;
|
||||
|
||||
/**
|
||||
* @ManyToOne(targetEntity="CompanyOrganization",cascade={"persist"})
|
||||
* @ManyToOne(targetEntity="CompanyOrganization", inversedBy="events", cascade={"persist"})
|
||||
* @JoinColumn(name="org_id", referencedColumnName="id")
|
||||
*/
|
||||
private $organization;
|
||||
|
@ -20,11 +20,11 @@ class CompanyPerson
|
||||
/**
|
||||
* @Id
|
||||
* @Column(type="integer")
|
||||
* @GeneratedValue(strategy="AUTO")
|
||||
* @GeneratedValue
|
||||
*/
|
||||
private $id;
|
||||
/**
|
||||
* @Column(type="string")
|
||||
* @Column
|
||||
*/
|
||||
private $name;
|
||||
/**
|
||||
|
@ -4,7 +4,7 @@ namespace Doctrine\Tests\Models\Company;
|
||||
|
||||
/** @Entity @Table(name="company_raffles") */
|
||||
class CompanyRaffle extends CompanyEvent {
|
||||
/** @Column(type="string") */
|
||||
/** @Column */
|
||||
private $data;
|
||||
|
||||
public function setData($data) {
|
||||
|
@ -17,17 +17,17 @@ class ECommerceCart
|
||||
/**
|
||||
* @Column(type="integer")
|
||||
* @Id
|
||||
* @GeneratedValue(strategy="AUTO")
|
||||
* @GeneratedValue
|
||||
*/
|
||||
private $id;
|
||||
|
||||
/**
|
||||
* @Column(type="string", length=50, nullable=true)
|
||||
* @Column(length=50, nullable=true)
|
||||
*/
|
||||
private $payment;
|
||||
|
||||
/**
|
||||
* @OneToOne(targetEntity="ECommerceCustomer")
|
||||
* @OneToOne(targetEntity="ECommerceCustomer", inversedBy="cart")
|
||||
* @JoinColumn(name="customer_id", referencedColumnName="id")
|
||||
*/
|
||||
private $customer;
|
||||
|
@ -36,7 +36,7 @@ class ECommerceCategory
|
||||
private $children;
|
||||
|
||||
/**
|
||||
* @ManyToOne(targetEntity="ECommerceCategory")
|
||||
* @ManyToOne(targetEntity="ECommerceCategory", inversedBy="children")
|
||||
* @JoinColumn(name="parent_id", referencedColumnName="id")
|
||||
*/
|
||||
private $parent;
|
||||
|
@ -14,17 +14,17 @@ class ECommerceFeature
|
||||
/**
|
||||
* @Column(type="integer")
|
||||
* @Id
|
||||
* @GeneratedValue(strategy="AUTO")
|
||||
* @GeneratedValue
|
||||
*/
|
||||
private $id;
|
||||
|
||||
/**
|
||||
* @Column(type="string", length=50)
|
||||
* @Column(length=50)
|
||||
*/
|
||||
private $description;
|
||||
|
||||
/**
|
||||
* @ManyToOne(targetEntity="ECommerceProduct")
|
||||
* @ManyToOne(targetEntity="ECommerceProduct", inversedBy="features")
|
||||
* @JoinColumn(name="product_id", referencedColumnName="id")
|
||||
*/
|
||||
private $product;
|
||||
|
@ -10,14 +10,14 @@ use Doctrine\Common\Collections\ArrayCollection;
|
||||
*
|
||||
* @author Giorgio Sironi
|
||||
* @Entity
|
||||
* @Table(name="ecommerce_products",indexes={@index(name="name_idx", columns={"name"})})
|
||||
* @Table(name="ecommerce_products",indexes={@Index(name="name_idx", columns={"name"})})
|
||||
*/
|
||||
class ECommerceProduct
|
||||
{
|
||||
/**
|
||||
* @Column(type="integer")
|
||||
* @Id
|
||||
* @GeneratedValue(strategy="AUTO")
|
||||
* @GeneratedValue
|
||||
*/
|
||||
private $id;
|
||||
|
||||
@ -38,7 +38,7 @@ class ECommerceProduct
|
||||
private $features;
|
||||
|
||||
/**
|
||||
* @ManyToMany(targetEntity="ECommerceCategory", cascade={"persist"})
|
||||
* @ManyToMany(targetEntity="ECommerceCategory", cascade={"persist"}, inversedBy="products")
|
||||
* @JoinTable(name="ecommerce_products_categories",
|
||||
* joinColumns={@JoinColumn(name="product_id", referencedColumnName="id")},
|
||||
* inverseJoinColumns={@JoinColumn(name="category_id", referencedColumnName="id")})
|
||||
@ -50,8 +50,8 @@ class ECommerceProduct
|
||||
* simplicity.
|
||||
* @ManyToMany(targetEntity="ECommerceProduct", cascade={"persist"})
|
||||
* @JoinTable(name="ecommerce_products_related",
|
||||
joinColumns={@JoinColumn(name="product_id", referencedColumnName="id")},
|
||||
inverseJoinColumns={@JoinColumn(name="related_id", referencedColumnName="id")})
|
||||
* joinColumns={@JoinColumn(name="product_id", referencedColumnName="id")},
|
||||
* inverseJoinColumns={@JoinColumn(name="related_id", referencedColumnName="id")})
|
||||
*/
|
||||
private $related;
|
||||
|
||||
|
@ -14,7 +14,7 @@ class ECommerceShipping
|
||||
{
|
||||
/**
|
||||
* @Id @Column(type="integer")
|
||||
* @GeneratedValue(strategy="AUTO")
|
||||
* @GeneratedValue
|
||||
*/
|
||||
private $id;
|
||||
|
||||
|
@ -21,7 +21,7 @@ class ForumBoard
|
||||
*/
|
||||
public $position;
|
||||
/**
|
||||
* @ManyToOne(targetEntity="ForumCategory")
|
||||
* @ManyToOne(targetEntity="ForumCategory", inversedBy="boards")
|
||||
* @JoinColumn(name="category_id", referencedColumnName="id")
|
||||
*/
|
||||
public $category;
|
||||
|
@ -10,8 +10,7 @@ class ForumUser
|
||||
{
|
||||
/**
|
||||
* @Column(type="integer")
|
||||
* @Id
|
||||
* @GeneratedValue(strategy="AUTO")
|
||||
* @Id @GeneratedValue
|
||||
*/
|
||||
public $id;
|
||||
/**
|
||||
|
@ -10,7 +10,7 @@ class DateTimeModel
|
||||
{
|
||||
/**
|
||||
* @Id @Column(type="integer")
|
||||
* @GeneratedValue(strategy="AUTO")
|
||||
* @GeneratedValue
|
||||
*/
|
||||
public $id;
|
||||
/**
|
||||
|
@ -8,20 +8,19 @@ namespace Doctrine\Tests\Models\Routing;
|
||||
class RoutingLeg
|
||||
{
|
||||
/**
|
||||
* @Id
|
||||
* @generatedValue(strategy="AUTO")
|
||||
* @Id @generatedValue
|
||||
* @column(type="integer")
|
||||
*/
|
||||
public $id;
|
||||
|
||||
/**
|
||||
* @ManyToOne(targetEntity="Doctrine\Tests\Models\Routing\RoutingLocation")
|
||||
* @ManyToOne(targetEntity="RoutingLocation")
|
||||
* @JoinColumn(name="from_id", referencedColumnName="id")
|
||||
*/
|
||||
public $fromLocation;
|
||||
|
||||
/**
|
||||
* @ManyToOne(targetEntity="Doctrine\Tests\Models\Routing\RoutingLocation")
|
||||
* @ManyToOne(targetEntity="RoutingLocation")
|
||||
* @JoinColumn(name="to_id", referencedColumnName="id")
|
||||
*/
|
||||
public $toLocation;
|
||||
|
@ -8,8 +8,7 @@ namespace Doctrine\Tests\Models\Routing;
|
||||
class RoutingLocation
|
||||
{
|
||||
/**
|
||||
* @Id
|
||||
* @generatedValue(strategy="AUTO")
|
||||
* @Id @GeneratedValue
|
||||
* @Column(type="integer")
|
||||
*/
|
||||
public $id;
|
||||
|
@ -11,7 +11,7 @@ class RoutingRoute
|
||||
{
|
||||
/**
|
||||
* @Id
|
||||
* @generatedValue(strategy="AUTO")
|
||||
* @GeneratedValue
|
||||
* @column(type="integer")
|
||||
*/
|
||||
public $id;
|
||||
|
@ -10,12 +10,12 @@ class RoutingRouteBooking
|
||||
/**
|
||||
* @Id
|
||||
* @Column(type="integer")
|
||||
* @generatedValue(strategy="AUTO")
|
||||
* @GeneratedValue
|
||||
*/
|
||||
public $id;
|
||||
|
||||
/**
|
||||
* @ManyToOne(targetEntity="RoutingRoute")
|
||||
* @ManyToOne(targetEntity="RoutingRoute", inversedBy="bookings")
|
||||
* @JoinColumn(name="route_id", referencedColumnName="id")
|
||||
*/
|
||||
public $route;
|
||||
|
@ -43,21 +43,21 @@ class DDC144Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
*/
|
||||
class DDC144FlowElement {
|
||||
/**
|
||||
* @Id @Column(type="integer") @GeneratedValue(strategy="AUTO")
|
||||
* @Id @Column(type="integer") @GeneratedValue
|
||||
* @var integer
|
||||
*/
|
||||
public $id;
|
||||
/** @Column(type="string") */
|
||||
/** @Column */
|
||||
public $property;
|
||||
}
|
||||
|
||||
// /** @Entity @Table(name="ddc144_expressions") */
|
||||
abstract class DDC144Expression extends DDC144FlowElement {
|
||||
abstract function method();
|
||||
}
|
||||
|
||||
/** @Entity @Table(name="ddc144_operands") */
|
||||
class DDC144Operand extends DDC144Expression {
|
||||
/** @Column(type="string") */
|
||||
/** @Column */
|
||||
public $operandProperty;
|
||||
function method() {}
|
||||
}
|
||||
|
@ -79,7 +79,7 @@ class DDC199ParentClass
|
||||
class DDC199ChildClass extends DDC199ParentClass
|
||||
{
|
||||
/**
|
||||
* @Column(type="string")
|
||||
* @Column
|
||||
*/
|
||||
public $childData;
|
||||
}
|
||||
@ -87,13 +87,13 @@ class DDC199ChildClass extends DDC199ParentClass
|
||||
/** @Entity @Table(name="ddc199_relatedclass") */
|
||||
class DDC199RelatedClass
|
||||
{
|
||||
/** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */
|
||||
/** @Id @Column(type="integer") @GeneratedValue */
|
||||
public $id;
|
||||
/** @Column(type="string") */
|
||||
/** @Column */
|
||||
public $relatedData;
|
||||
|
||||
/**
|
||||
* @ManyToOne(targetEntity="DDC199ParentClass")
|
||||
* @ManyToOne(targetEntity="DDC199ParentClass", inversedBy="relatedEntities")
|
||||
* @JoinColumn(name="parent_id", referencedColumnName="id")
|
||||
*/
|
||||
public $parent;
|
||||
|
@ -65,7 +65,7 @@ class DDC211User
|
||||
protected $name;
|
||||
|
||||
/**
|
||||
* @ManyToMany(targetEntity="DDC211Group")
|
||||
* @ManyToMany(targetEntity="DDC211Group", inversedBy="users")
|
||||
* @JoinTable(name="user_groups",
|
||||
* joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
|
||||
* inverseJoinColumns={@JoinColumn(name="group_id", referencedColumnName="id")}
|
||||
|
@ -68,7 +68,7 @@ class DDC237Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
class DDC237EntityX
|
||||
{
|
||||
/**
|
||||
* @Id @Column(type="integer") @GeneratedValue(strategy="AUTO")
|
||||
* @Id @Column(type="integer") @GeneratedValue
|
||||
*/
|
||||
public $id;
|
||||
/**
|
||||
@ -87,7 +87,7 @@ class DDC237EntityX
|
||||
class DDC237EntityY
|
||||
{
|
||||
/**
|
||||
* @Id @Column(type="integer") @GeneratedValue(strategy="AUTO")
|
||||
* @Id @Column(type="integer") @GeneratedValue
|
||||
*/
|
||||
public $id;
|
||||
/**
|
||||
@ -99,7 +99,7 @@ class DDC237EntityY
|
||||
/** @Entity @Table(name="ddc237_z") */
|
||||
class DDC237EntityZ
|
||||
{
|
||||
/** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */
|
||||
/** @Id @Column(type="integer") @GeneratedValue */
|
||||
public $id;
|
||||
/** @Column(type="string") */
|
||||
public $data;
|
||||
|
@ -68,7 +68,7 @@ abstract class DDC279EntityXAbstract
|
||||
{
|
||||
/**
|
||||
* @Id
|
||||
* @generatedValue(strategy="AUTO")
|
||||
* @GeneratedValue
|
||||
* @Column(name="id", type="integer")
|
||||
*/
|
||||
public $id;
|
||||
@ -98,8 +98,7 @@ class DDC279EntityX extends DDC279EntityXAbstract
|
||||
class DDC279EntityY
|
||||
{
|
||||
/**
|
||||
* @Id
|
||||
* @generatedValue(strategy="AUTO")
|
||||
* @Id @GeneratedValue
|
||||
* @Column(name="id", type="integer")
|
||||
*/
|
||||
public $id;
|
||||
@ -122,8 +121,7 @@ class DDC279EntityY
|
||||
class DDC279EntityZ
|
||||
{
|
||||
/**
|
||||
* @Id
|
||||
* @generatedValue(strategy="AUTO")
|
||||
* @Id @GeneratedValue
|
||||
* @Column(name="id", type="integer")
|
||||
*/
|
||||
public $id;
|
||||
|
@ -54,7 +54,7 @@ class DDC309Country
|
||||
/**
|
||||
* @Id
|
||||
* @Column(name="id", type="integer")
|
||||
* @GeneratedValue(strategy="AUTO")
|
||||
* @GeneratedValue
|
||||
*/
|
||||
public $id;
|
||||
}
|
||||
@ -67,7 +67,7 @@ class DDC309User
|
||||
/**
|
||||
* @Id
|
||||
* @Column(name="id", type="integer")
|
||||
* @GeneratedValue(strategy="AUTO")
|
||||
* @GeneratedValue
|
||||
*/
|
||||
public $id;
|
||||
}
|
||||
|
@ -118,13 +118,13 @@ class DDC345Membership
|
||||
public $id;
|
||||
|
||||
/**
|
||||
* @OneToOne(targetEntity="DDC345User")
|
||||
* @OneToOne(targetEntity="DDC345User", inversedBy="Memberships")
|
||||
* @JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
|
||||
*/
|
||||
public $user;
|
||||
|
||||
/**
|
||||
* @OneToOne(targetEntity="DDC345Group")
|
||||
* @OneToOne(targetEntity="DDC345Group", inversedBy="Memberships")
|
||||
* @JoinColumn(name="group_id", referencedColumnName="id", nullable=false)
|
||||
*/
|
||||
public $group;
|
||||
|
@ -78,8 +78,7 @@ class DDC353Picture
|
||||
{
|
||||
/**
|
||||
* @Column(name="picture_id", type="integer")
|
||||
* @Id
|
||||
* @GeneratedValue(strategy="AUTO")
|
||||
* @Id @GeneratedValue
|
||||
*/
|
||||
private $pictureId;
|
||||
|
||||
|
@ -53,7 +53,7 @@ class DDC371Child {
|
||||
private $id;
|
||||
/** @Column(type="string") */
|
||||
public $data;
|
||||
/** @ManyToOne(targetEntity="DDC371Parent") @JoinColumn(name="parentId") */
|
||||
/** @ManyToOne(targetEntity="DDC371Parent", inversedBy="children") @JoinColumn(name="parentId") */
|
||||
public $parent;
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,7 @@ class DDC381Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
class DDC381Entity
|
||||
{
|
||||
/**
|
||||
* @Id @Column(type="integer") @generatedValue
|
||||
* @Id @Column(type="integer") @GeneratedValue
|
||||
*/
|
||||
protected $id;
|
||||
|
||||
|
@ -212,7 +212,7 @@ class Relation {
|
||||
|
||||
/**
|
||||
* @var Lemma
|
||||
* @ManyToOne(targetEntity="Lemma")
|
||||
* @ManyToOne(targetEntity="Lemma", inversedBy="relations")
|
||||
* @JoinColumn(name="relation_parent_id", referencedColumnName="lemma_id")
|
||||
*/
|
||||
private $parent;
|
||||
@ -226,7 +226,7 @@ class Relation {
|
||||
|
||||
/**
|
||||
* @var RelationType
|
||||
* @ManyToOne(targetEntity="RelationType")
|
||||
* @ManyToOne(targetEntity="RelationType", inversedBy="relations")
|
||||
* @JoinColumn(name="relation_type_id", referencedColumnName="relation_type_id")
|
||||
*/
|
||||
private $type;
|
||||
|
@ -73,7 +73,6 @@ abstract class AbstractMappingDriverTest extends \Doctrine\Tests\OrmTestCase
|
||||
public function testAssocations($class)
|
||||
{
|
||||
$this->assertEquals(3, count($class->associationMappings));
|
||||
$this->assertEquals(1, count($class->inverseMappings));
|
||||
|
||||
return $class;
|
||||
}
|
||||
@ -87,6 +86,7 @@ abstract class AbstractMappingDriverTest extends \Doctrine\Tests\OrmTestCase
|
||||
$this->assertTrue($class->associationMappings['address'] instanceof \Doctrine\ORM\Mapping\OneToOneMapping);
|
||||
$this->assertTrue(isset($class->associationMappings['address']));
|
||||
$this->assertTrue($class->associationMappings['address']->isOwningSide);
|
||||
$this->assertEquals('user', $class->associationMappings['address']->inversedBy);
|
||||
// Check cascading
|
||||
$this->assertTrue($class->associationMappings['address']->isCascadeRemove);
|
||||
$this->assertFalse($class->associationMappings['address']->isCascadePersist);
|
||||
@ -223,13 +223,12 @@ class User
|
||||
public $email;
|
||||
|
||||
/**
|
||||
* @OneToOne(targetEntity="Address", cascade={"remove"})
|
||||
* @OneToOne(targetEntity="Address", cascade={"remove"}, inversedBy="user")
|
||||
* @JoinColumn(onDelete="CASCADE", onUpdate="CASCADE")
|
||||
*/
|
||||
public $address;
|
||||
|
||||
/**
|
||||
*
|
||||
* @OneToMany(targetEntity="Phonenumber", mappedBy="user", cascade={"persist"})
|
||||
* @OrderBy({"number"="ASC"})
|
||||
*/
|
||||
|
@ -100,8 +100,8 @@ class ClassMetadataTest extends \Doctrine\Tests\OrmTestCase
|
||||
$this->assertTrue($assoc instanceof \Doctrine\ORM\Mapping\ManyToManyMapping);
|
||||
$this->assertEquals(array(
|
||||
'name' => 'CmsUser_CmsGroup',
|
||||
'joinColumns' => array(array('name' => 'CmsUser_id', 'referencedColumnName' => 'id')),
|
||||
'inverseJoinColumns' => array(array('name' => 'CmsGroup_id', 'referencedColumnName' => 'id'))
|
||||
'joinColumns' => array(array('name' => 'CmsUser_id', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE')),
|
||||
'inverseJoinColumns' => array(array('name' => 'CmsGroup_id', 'referencedColumnName' => 'id', 'onDelete' => 'CASCADE'))
|
||||
), $assoc->joinTable);
|
||||
}
|
||||
|
||||
|
@ -39,6 +39,7 @@ $metadata->mapOneToOne(array(
|
||||
0 => 'remove',
|
||||
),
|
||||
'mappedBy' => NULL,
|
||||
'inversedBy' => 'user',
|
||||
'joinColumns' =>
|
||||
array(
|
||||
0 =>
|
||||
|
@ -20,7 +20,7 @@
|
||||
<field name="name" column="name" type="string" length="50" nullable="true" unique="true" />
|
||||
<field name="email" column="user_email" type="string" column-definition="CHAR(32) NOT NULL" />
|
||||
|
||||
<one-to-one field="address" target-entity="Address">
|
||||
<one-to-one field="address" target-entity="Address" inversed-by="user">
|
||||
<cascade><cascade-remove /></cascade>
|
||||
<join-column name="address_id" referenced-column-name="id" on-delete="CASCADE" on-update="CASCADE"/>
|
||||
</one-to-one>
|
||||
|
@ -19,6 +19,7 @@ Doctrine\Tests\ORM\Mapping\User:
|
||||
oneToOne:
|
||||
address:
|
||||
targetEntity: Address
|
||||
inversedBy: user
|
||||
joinColumn:
|
||||
name: address_id
|
||||
referencedColumnName: id
|
||||
|
Loading…
Reference in New Issue
Block a user