Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
doctrine-dbal
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Tomáš Trávníček
doctrine-dbal
Commits
31892fb4
Commit
31892fb4
authored
Jul 02, 2009
by
romanb
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[2.0] Fixed cascading issue (#2307). Fixed many-many object hydration issue.
parent
3f4cd46b
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
109 additions
and
123 deletions
+109
-123
ObjectHydrator.php
lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php
+13
-7
PersistentCollection.php
lib/Doctrine/ORM/PersistentCollection.php
+52
-78
UnitOfWork.php
lib/Doctrine/ORM/UnitOfWork.php
+6
-8
CmsArticle.php
tests/Doctrine/Tests/Models/CMS/CmsArticle.php
+4
-0
CmsPhonenumber.php
tests/Doctrine/Tests/Models/CMS/CmsPhonenumber.php
+5
-3
CmsUser.php
tests/Doctrine/Tests/Models/CMS/CmsUser.php
+2
-6
ECommerceFeature.php
tests/Doctrine/Tests/Models/ECommerce/ECommerceFeature.php
+1
-4
AbstractManyToManyAssociationTestCase.php
.../ORM/Functional/AbstractManyToManyAssociationTestCase.php
+2
-1
ManyToManyBidirectionalAssociationTest.php
...ORM/Functional/ManyToManyBidirectionalAssociationTest.php
+19
-8
ManyToManyUnidirectionalAssociationTest.php
...RM/Functional/ManyToManyUnidirectionalAssociationTest.php
+4
-8
OrmFunctionalTestCase.php
tests/Doctrine/Tests/OrmFunctionalTestCase.php
+1
-0
No files found.
lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php
View file @
31892fb4
...
@@ -123,7 +123,6 @@ class ObjectHydrator extends AbstractHydrator
...
@@ -123,7 +123,6 @@ class ObjectHydrator extends AbstractHydrator
// Take snapshots from all initialized collections
// Take snapshots from all initialized collections
foreach
(
$this
->
_collections
as
$coll
)
{
foreach
(
$this
->
_collections
as
$coll
)
{
$coll
->
takeSnapshot
();
$coll
->
takeSnapshot
();
$coll
->
setHydrationFlag
(
false
);
}
}
// Clean up
// Clean up
...
@@ -344,7 +343,7 @@ class ObjectHydrator extends AbstractHydrator
...
@@ -344,7 +343,7 @@ class ObjectHydrator extends AbstractHydrator
if
(
!
$relation
->
isOneToOne
())
{
if
(
!
$relation
->
isOneToOne
())
{
if
(
isset
(
$nonemptyComponents
[
$dqlAlias
]))
{
if
(
isset
(
$nonemptyComponents
[
$dqlAlias
]))
{
if
(
!
isset
(
$this
->
_initializedRelations
[
spl_object_hash
(
$baseElement
)][
$relationAlias
]))
{
if
(
!
isset
(
$this
->
_initializedRelations
[
spl_object_hash
(
$baseElement
)][
$relationAlias
]))
{
$this
->
initRelatedCollection
(
$baseElement
,
$relationAlias
)
->
setHydrationFlag
(
true
)
;
$this
->
initRelatedCollection
(
$baseElement
,
$relationAlias
);
}
}
$path
=
$parent
.
'.'
.
$dqlAlias
;
$path
=
$parent
.
'.'
.
$dqlAlias
;
...
@@ -357,10 +356,17 @@ class ObjectHydrator extends AbstractHydrator
...
@@ -357,10 +356,17 @@ class ObjectHydrator extends AbstractHydrator
// If it's a bi-directional many-to-many, also initialize the reverse collection.
// If it's a bi-directional many-to-many, also initialize the reverse collection.
if
(
$relation
->
isManyToMany
())
{
if
(
$relation
->
isManyToMany
())
{
if
(
$relation
->
isOwningSide
&&
isset
(
$this
->
_ce
[
$entityName
]
->
inverseMappings
[
$relationAlias
]))
{
if
(
$relation
->
isOwningSide
&&
isset
(
$this
->
_ce
[
$entityName
]
->
inverseMappings
[
$relationAlias
]))
{
$this
->
initRelatedCollection
(
$element
,
$this
->
_ce
[
$entityName
]
$inverseFieldName
=
$this
->
_ce
[
$entityName
]
->
inverseMappings
[
$relationAlias
]
->
sourceFieldName
;
->
inverseMappings
[
$relationAlias
]
->
sourceFieldName
);
// Only initialize reverse collection if it is not yet initialized.
if
(
!
isset
(
$this
->
_initializedRelations
[
spl_object_hash
(
$element
)][
$inverseFieldName
]))
{
$this
->
initRelatedCollection
(
$element
,
$this
->
_ce
[
$entityName
]
->
inverseMappings
[
$relationAlias
]
->
sourceFieldName
);
}
}
else
if
(
$relation
->
mappedByFieldName
)
{
}
else
if
(
$relation
->
mappedByFieldName
)
{
$this
->
initRelatedCollection
(
$element
,
$relation
->
mappedByFieldName
);
// Only initialize reverse collection if it is not yet initialized.
if
(
!
isset
(
$this
->
_initializedRelations
[
spl_object_hash
(
$element
)][
$relation
->
mappedByFieldName
]))
{
$this
->
initRelatedCollection
(
$element
,
$relation
->
mappedByFieldName
);
}
}
}
}
}
...
@@ -371,12 +377,12 @@ class ObjectHydrator extends AbstractHydrator
...
@@ -371,12 +377,12 @@ class ObjectHydrator extends AbstractHydrator
$this
->
_ce
[
$parentClass
]
$this
->
_ce
[
$parentClass
]
->
reflFields
[
$relationAlias
]
->
reflFields
[
$relationAlias
]
->
getValue
(
$baseElement
)
->
getValue
(
$baseElement
)
->
s
et
(
$indexValue
,
$element
);
->
hydrateS
et
(
$indexValue
,
$element
);
}
else
{
}
else
{
$this
->
_ce
[
$parentClass
]
$this
->
_ce
[
$parentClass
]
->
reflFields
[
$relationAlias
]
->
reflFields
[
$relationAlias
]
->
getValue
(
$baseElement
)
->
getValue
(
$baseElement
)
->
a
dd
(
$element
);
->
hydrateA
dd
(
$element
);
}
}
$this
->
_identifierMap
[
$path
][
$id
[
$parent
]][
$id
[
$dqlAlias
]]
=
$this
->
getLastKey
(
$this
->
_identifierMap
[
$path
][
$id
[
$parent
]][
$id
[
$dqlAlias
]]
=
$this
->
getLastKey
(
$this
->
_ce
[
$parentClass
]
$this
->
_ce
[
$parentClass
]
...
...
lib/Doctrine/ORM/PersistentCollection.php
View file @
31892fb4
...
@@ -26,7 +26,7 @@ use Doctrine\ORM\Mapping\AssociationMapping;
...
@@ -26,7 +26,7 @@ use Doctrine\ORM\Mapping\AssociationMapping;
/**
/**
* A PersistentCollection represents a collection of elements that have persistent state.
* A PersistentCollection represents a collection of elements that have persistent state.
*
*
* Collections of entities represent only the associations (links) to those entities.
* Collections of entities represent only the associations (links) to those entities.
* That means, if the collection is part of a many-many mapping and you remove
* That means, if the collection is part of a many-many mapping and you remove
* entities from the collection, only the links in the relation table are removed (on flush).
* entities from the collection, only the links in the relation table are removed (on flush).
...
@@ -43,7 +43,7 @@ use Doctrine\ORM\Mapping\AssociationMapping;
...
@@ -43,7 +43,7 @@ use Doctrine\ORM\Mapping\AssociationMapping;
* @author Roman Borschel <roman@code-factory.org>
* @author Roman Borschel <roman@code-factory.org>
*/
*/
final
class
PersistentCollection
extends
\Doctrine\Common\Collections\Collection
final
class
PersistentCollection
extends
\Doctrine\Common\Collections\Collection
{
{
/**
/**
* The base type of the collection.
* The base type of the collection.
*
*
...
@@ -61,7 +61,7 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
...
@@ -61,7 +61,7 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
/**
/**
* The entity that owns this collection.
* The entity that owns this collection.
*
*
* @var object
* @var object
*/
*/
private
$_owner
;
private
$_owner
;
...
@@ -80,14 +80,14 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
...
@@ -80,14 +80,14 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
* @var string
* @var string
*/
*/
private
$_keyField
;
private
$_keyField
;
/**
/**
* The EntityManager that manages the persistence of the collection.
* The EntityManager that manages the persistence of the collection.
*
*
* @var Doctrine\ORM\EntityManager
* @var Doctrine\ORM\EntityManager
*/
*/
private
$_em
;
private
$_em
;
/**
/**
* The name of the field on the target entities that points to the owner
* The name of the field on the target entities that points to the owner
* of the collection. This is only set if the association is bi-directional.
* of the collection. This is only set if the association is bi-directional.
...
@@ -95,14 +95,6 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
...
@@ -95,14 +95,6 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
* @var string
* @var string
*/
*/
private
$_backRefFieldName
;
private
$_backRefFieldName
;
/**
* Hydration flag.
*
* @var boolean
* @see setHydrationFlag()
*/
private
$_hydrationFlag
=
false
;
/**
/**
* The class descriptor of the owning entity.
* The class descriptor of the owning entity.
...
@@ -116,7 +108,7 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
...
@@ -116,7 +108,7 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
* @var boolean
* @var boolean
*/
*/
private
$_isDirty
=
false
;
private
$_isDirty
=
false
;
/** Whether the collection has already been initialized. */
/** Whether the collection has already been initialized. */
private
$_initialized
=
false
;
private
$_initialized
=
false
;
...
@@ -151,7 +143,7 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
...
@@ -151,7 +143,7 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
{
{
return
$this
->
_keyField
;
return
$this
->
_keyField
;
}
}
/**
/**
* INTERNAL:
* INTERNAL:
* Sets the collection owner. Used (only?) during hydration.
* Sets the collection owner. Used (only?) during hydration.
...
@@ -170,8 +162,7 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
...
@@ -170,8 +162,7 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
$targetClass
=
$this
->
_em
->
getClassMetadata
(
$assoc
->
targetEntityName
);
$targetClass
=
$this
->
_em
->
getClassMetadata
(
$assoc
->
targetEntityName
);
if
(
isset
(
$targetClass
->
inverseMappings
[
$assoc
->
sourceFieldName
]))
{
if
(
isset
(
$targetClass
->
inverseMappings
[
$assoc
->
sourceFieldName
]))
{
// Bi-directional
// Bi-directional
$this
->
_backRefFieldName
=
$targetClass
->
inverseMappings
[
$assoc
->
sourceFieldName
]
$this
->
_backRefFieldName
=
$targetClass
->
inverseMappings
[
$assoc
->
sourceFieldName
]
->
sourceFieldName
;
->
sourceFieldName
;
}
}
}
}
}
}
...
@@ -208,7 +199,7 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
...
@@ -208,7 +199,7 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
{
{
//TODO: delete entity if shouldDeleteOrphans
//TODO: delete entity if shouldDeleteOrphans
/*if ($this->_association->isOneToMany() && $this->_association->shouldDeleteOrphans()) {
/*if ($this->_association->isOneToMany() && $this->_association->shouldDeleteOrphans()) {
$this->_em->delete($removed);
$this->_em->delete($removed);
}*/
}*/
$removed
=
parent
::
remove
(
$key
);
$removed
=
parent
::
remove
(
$key
);
if
(
$removed
)
{
if
(
$removed
)
{
...
@@ -220,7 +211,7 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
...
@@ -220,7 +211,7 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
/**
/**
* When the collection is a Map this is like put(key,value)/add(key,value).
* When the collection is a Map this is like put(key,value)/add(key,value).
* When the collection is a List this is like add(position,value).
* When the collection is a List this is like add(position,value).
*
*
* @param integer $key
* @param integer $key
* @param mixed $value
* @param mixed $value
* @override
* @override
...
@@ -228,55 +219,57 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
...
@@ -228,55 +219,57 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
public
function
set
(
$key
,
$value
)
public
function
set
(
$key
,
$value
)
{
{
parent
::
set
(
$key
,
$value
);
parent
::
set
(
$key
,
$value
);
if
(
!
$this
->
_hydrationFlag
)
{
$this
->
_changed
();
$this
->
_changed
();
}
}
}
/**
/**
* Adds an element to the collection.
* Adds an element to the collection.
*
*
* @param mixed $value
* @param mixed $value
* @param string $key
* @param string $key
* @return boolean Always TRUE.
* @return boolean Always TRUE.
* @override
* @override
*/
*/
public
function
add
(
$value
)
public
function
add
(
$value
)
{
{
parent
::
add
(
$value
);
parent
::
add
(
$value
);
$this
->
_changed
();
return
true
;
}
if
(
$this
->
_hydrationFlag
)
{
/**
if
(
$this
->
_backRefFieldName
)
{
* INTERNAL:
// Set back reference to owner
* Adds an element to a collection during hydration.
if
(
$this
->
_association
->
isOneToMany
())
{
*
$this
->
_typeClass
->
getReflectionProperty
(
$this
->
_backRefFieldName
)
* @param mixed $value The element to add.
->
setValue
(
$value
,
$this
->
_owner
);
*/
}
else
{
public
function
hydrateAdd
(
$value
)
// ManyToMany
{
$this
->
_typeClass
->
getReflectionProperty
(
$this
->
_backRefFieldName
)
parent
::
add
(
$value
);
->
getValue
(
$value
)
->
add
(
$this
->
_owner
);
if
(
$this
->
_backRefFieldName
)
{
}
// Set back reference to owner
if
(
$this
->
_association
->
isOneToMany
())
{
// OneToMany
$this
->
_typeClass
->
getReflectionProperty
(
$this
->
_backRefFieldName
)
->
setValue
(
$value
,
$this
->
_owner
);
}
else
{
// ManyToMany
$this
->
_typeClass
->
getReflectionProperty
(
$this
->
_backRefFieldName
)
->
getValue
(
$value
)
->
add
(
$this
->
_owner
);
}
}
}
else
{
$this
->
_changed
();
}
}
return
true
;
}
}
/**
/**
* Adds all elements of the other collection to this collection.
* INTERNAL:
* Sets a keyed element in the collection during hydration.
*
*
* @param object $otherCollection
* @param mixed $key The key to set.
* @todo Impl
* $param mixed $value The element to set.
* @override
*/
*/
public
function
addAll
(
$otherCollection
)
public
function
hydrateSet
(
$key
,
$value
)
{
{
parent
::
addAll
(
$otherCollection
);
parent
::
set
(
$key
,
$value
);
//...
//TODO: Register collection as dirty with the UoW if necessary
//$this->_changed();
}
}
/**
/**
...
@@ -285,7 +278,7 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
...
@@ -285,7 +278,7 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
*/
*/
public
function
contains
(
$element
)
public
function
contains
(
$element
)
{
{
if
(
!
$this
->
_initialized
)
{
if
(
!
$this
->
_initialized
)
{
//TODO: Probably need to hit the database here...?
//TODO: Probably need to hit the database here...?
//return $this->_checkElementExistence($element);
//return $this->_checkElementExistence($element);
...
@@ -306,31 +299,12 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
...
@@ -306,31 +299,12 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
private
function
_checkElementExistence
(
$element
)
private
function
_checkElementExistence
(
$element
)
{
{
}
}
private
function
_initialize
()
private
function
_initialize
()
{
{
}
/**
* INTERNAL:
* Sets a flag that indicates whether the collection is currently being hydrated.
*
* If the flag is set to TRUE, this has the following consequences:
*
* 1) During hydration, bidirectional associations are completed automatically
* by setting the back reference.
* 2) During hydration no change notifications are reported to the UnitOfWork.
* That means add() etc. do not cause the collection to be scheduled
* for an update.
*
* @param boolean $bool
*/
public
function
setHydrationFlag
(
$bool
)
{
$this
->
_hydrationFlag
=
$bool
;
}
}
/**
/**
...
@@ -376,24 +350,24 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
...
@@ -376,24 +350,24 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
/**
/**
* Compares two records. To be used on _snapshot diffs using array_udiff.
* Compares two records. To be used on _snapshot diffs using array_udiff.
*
*
* @return integer
* @return integer
*/
*/
private
function
_compareRecords
(
$a
,
$b
)
private
function
_compareRecords
(
$a
,
$b
)
{
{
return
$a
===
$b
?
0
:
1
;
return
$a
===
$b
?
0
:
1
;
}
}
/**
/**
* INTERNAL: Gets the association mapping of the collection.
* INTERNAL: Gets the association mapping of the collection.
*
*
* @return Doctrine\ORM\Mapping\AssociationMapping
* @return Doctrine\ORM\Mapping\AssociationMapping
*/
*/
public
function
getMapping
()
public
function
getMapping
()
{
{
return
$this
->
_association
;
return
$this
->
_association
;
}
}
/**
/**
* Clears the collection.
* Clears the collection.
*/
*/
...
@@ -402,14 +376,14 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
...
@@ -402,14 +376,14 @@ final class PersistentCollection extends \Doctrine\Common\Collections\Collection
//TODO: Register collection as dirty with the UoW if necessary
//TODO: Register collection as dirty with the UoW if necessary
//TODO: If oneToMany() && shouldDeleteOrphan() delete entities
//TODO: If oneToMany() && shouldDeleteOrphan() delete entities
/*if ($this->_association->isOneToMany() && $this->_association->shouldDeleteOrphans()) {
/*if ($this->_association->isOneToMany() && $this->_association->shouldDeleteOrphans()) {
foreach ($this->_data as $entity) {
foreach ($this->_data as $entity) {
$this->_em->delete($entity);
$this->_em->delete($entity);
}
}
}*/
}*/
parent
::
clear
();
parent
::
clear
();
$this
->
_changed
();
$this
->
_changed
();
}
}
private
function
_changed
()
private
function
_changed
()
{
{
$this
->
_isDirty
=
true
;
$this
->
_isDirty
=
true
;
...
...
lib/Doctrine/ORM/UnitOfWork.php
View file @
31892fb4
...
@@ -1148,11 +1148,11 @@ class UnitOfWork implements PropertyChangedListener
...
@@ -1148,11 +1148,11 @@ class UnitOfWork implements PropertyChangedListener
}
}
$relatedEntities
=
$class
->
reflFields
[
$assocMapping
->
getSourceFieldName
()]
$relatedEntities
=
$class
->
reflFields
[
$assocMapping
->
getSourceFieldName
()]
->
getValue
(
$entity
);
->
getValue
(
$entity
);
if
(
(
$relatedEntities
instanceof
Collection
)
&&
count
(
$relatedEntities
)
>
0
)
{
if
(
$relatedEntities
instanceof
Collection
)
{
foreach
(
$relatedEntities
as
$relatedEntity
)
{
foreach
(
$relatedEntities
as
$relatedEntity
)
{
$this
->
_doMerge
(
$relatedEntity
,
$visited
,
$managedCopy
,
$assocMapping
);
$this
->
_doMerge
(
$relatedEntity
,
$visited
,
$managedCopy
,
$assocMapping
);
}
}
}
else
if
(
is_object
(
$relatedEntities
)
)
{
}
else
if
(
$relatedEntities
!==
null
)
{
$this
->
_doMerge
(
$relatedEntities
,
$visited
,
$managedCopy
,
$assocMapping
);
$this
->
_doMerge
(
$relatedEntities
,
$visited
,
$managedCopy
,
$assocMapping
);
}
}
}
}
...
@@ -1173,12 +1173,11 @@ class UnitOfWork implements PropertyChangedListener
...
@@ -1173,12 +1173,11 @@ class UnitOfWork implements PropertyChangedListener
continue
;
continue
;
}
}
$relatedEntities
=
$class
->
reflFields
[
$assocMapping
->
sourceFieldName
]
->
getValue
(
$entity
);
$relatedEntities
=
$class
->
reflFields
[
$assocMapping
->
sourceFieldName
]
->
getValue
(
$entity
);
if
((
$relatedEntities
instanceof
Collection
||
is_array
(
$relatedEntities
))
if
((
$relatedEntities
instanceof
Collection
||
is_array
(
$relatedEntities
)))
{
&&
count
(
$relatedEntities
)
>
0
)
{
foreach
(
$relatedEntities
as
$relatedEntity
)
{
foreach
(
$relatedEntities
as
$relatedEntity
)
{
$this
->
_doSave
(
$relatedEntity
,
$visited
,
$insertNow
);
$this
->
_doSave
(
$relatedEntity
,
$visited
,
$insertNow
);
}
}
}
else
if
(
is_object
(
$relatedEntities
)
)
{
}
else
if
(
$relatedEntities
!==
null
)
{
$this
->
_doSave
(
$relatedEntities
,
$visited
,
$insertNow
);
$this
->
_doSave
(
$relatedEntities
,
$visited
,
$insertNow
);
}
}
}
}
...
@@ -1199,12 +1198,11 @@ class UnitOfWork implements PropertyChangedListener
...
@@ -1199,12 +1198,11 @@ class UnitOfWork implements PropertyChangedListener
}
}
$relatedEntities
=
$class
->
reflFields
[
$assocMapping
->
sourceFieldName
]
$relatedEntities
=
$class
->
reflFields
[
$assocMapping
->
sourceFieldName
]
->
getValue
(
$entity
);
->
getValue
(
$entity
);
if
(
$relatedEntities
instanceof
Collection
||
is_array
(
$relatedEntities
)
if
(
$relatedEntities
instanceof
Collection
||
is_array
(
$relatedEntities
))
{
&&
count
(
$relatedEntities
)
>
0
)
{
foreach
(
$relatedEntities
as
$relatedEntity
)
{
foreach
(
$relatedEntities
as
$relatedEntity
)
{
$this
->
_doDelete
(
$relatedEntity
,
$visited
);
$this
->
_doDelete
(
$relatedEntity
,
$visited
);
}
}
}
else
if
(
is_object
(
$relatedEntities
)
)
{
}
else
if
(
$relatedEntities
!==
null
)
{
$this
->
_doDelete
(
$relatedEntities
,
$visited
);
$this
->
_doDelete
(
$relatedEntities
,
$visited
);
}
}
}
}
...
...
tests/Doctrine/Tests/Models/CMS/CmsArticle.php
View file @
31892fb4
...
@@ -31,4 +31,8 @@ class CmsArticle
...
@@ -31,4 +31,8 @@ class CmsArticle
* @OneToMany(targetEntity="CmsComment", mappedBy="article")
* @OneToMany(targetEntity="CmsComment", mappedBy="article")
*/
*/
public
$comments
;
public
$comments
;
public
function
setAuthor
(
CmsUser
$author
)
{
$this
->
user
=
$author
;
}
}
}
tests/Doctrine/Tests/Models/CMS/CmsPhonenumber.php
View file @
31892fb4
...
@@ -9,8 +9,7 @@ namespace Doctrine\Tests\Models\CMS;
...
@@ -9,8 +9,7 @@ namespace Doctrine\Tests\Models\CMS;
class
CmsPhonenumber
class
CmsPhonenumber
{
{
/**
/**
* @Column(type="string", length=50)
* @Id @Column(type="string", length=50)
* @Id
*/
*/
public
$phonenumber
;
public
$phonenumber
;
/**
/**
...
@@ -21,6 +20,9 @@ class CmsPhonenumber
...
@@ -21,6 +20,9 @@ class CmsPhonenumber
public
function
setUser
(
CmsUser
$user
)
{
public
function
setUser
(
CmsUser
$user
)
{
$this
->
user
=
$user
;
$this
->
user
=
$user
;
$user
->
addPhonenumber
(
$this
);
}
public
function
getUser
()
{
return
$this
->
user
;
}
}
}
}
tests/Doctrine/Tests/Models/CMS/CmsUser.php
View file @
31892fb4
...
@@ -68,9 +68,7 @@ class CmsUser
...
@@ -68,9 +68,7 @@ class CmsUser
*/
*/
public
function
addPhonenumber
(
CmsPhonenumber
$phone
)
{
public
function
addPhonenumber
(
CmsPhonenumber
$phone
)
{
$this
->
phonenumbers
[]
=
$phone
;
$this
->
phonenumbers
[]
=
$phone
;
if
(
$phone
->
user
!==
$this
)
{
$phone
->
setUser
(
$this
);
$phone
->
user
=
$this
;
}
}
}
public
function
getPhonenumbers
()
{
public
function
getPhonenumbers
()
{
...
@@ -79,9 +77,7 @@ class CmsUser
...
@@ -79,9 +77,7 @@ class CmsUser
public
function
addArticle
(
CmsArticle
$article
)
{
public
function
addArticle
(
CmsArticle
$article
)
{
$this
->
articles
[]
=
$article
;
$this
->
articles
[]
=
$article
;
if
(
$article
->
user
!==
$this
)
{
$article
->
setAuthor
(
$this
);
$article
->
user
=
$this
;
}
}
}
public
function
addGroup
(
CmsGroup
$group
)
{
public
function
addGroup
(
CmsGroup
$group
)
{
...
...
tests/Doctrine/Tests/Models/ECommerce/ECommerceFeature.php
View file @
31892fb4
...
@@ -42,10 +42,7 @@ class ECommerceFeature
...
@@ -42,10 +42,7 @@ class ECommerceFeature
}
}
public
function
setProduct
(
ECommerceProduct
$product
)
{
public
function
setProduct
(
ECommerceProduct
$product
)
{
if
(
$this
->
product
!==
$product
)
{
$this
->
product
=
$product
;
$this
->
product
=
$product
;
$product
->
addFeature
(
$this
);
}
}
}
public
function
removeProduct
()
{
public
function
removeProduct
()
{
...
...
tests/Doctrine/Tests/ORM/Functional/AbstractManyToManyAssociationTestCase.php
View file @
31892fb4
...
@@ -32,7 +32,8 @@ class AbstractManyToManyAssociationTestCase extends \Doctrine\Tests\OrmFunctiona
...
@@ -32,7 +32,8 @@ class AbstractManyToManyAssociationTestCase extends \Doctrine\Tests\OrmFunctiona
FROM
{
$this
->
_table
}
FROM
{
$this
->
_table
}
WHERE
{
$this
->
_firstField
}
=?
WHERE
{
$this
->
_firstField
}
=?
AND
{
$this
->
_secondField
}
=?"
,
AND
{
$this
->
_secondField
}
=?"
,
array
(
$firstId
,
$secondId
)));
array
(
$firstId
,
$secondId
))
->
fetchAll
());
}
}
public
function
assertCollectionEquals
(
Collection
$first
,
Collection
$second
)
public
function
assertCollectionEquals
(
Collection
$first
,
Collection
$second
)
...
...
tests/Doctrine/Tests/ORM/Functional/ManyToManyBidirectionalAssociationTest.php
View file @
31892fb4
...
@@ -14,9 +14,9 @@ require_once __DIR__ . '/../../TestInit.php';
...
@@ -14,9 +14,9 @@ require_once __DIR__ . '/../../TestInit.php';
*/
*/
class
ManyToManyBidirectionalAssociationTest
extends
AbstractManyToManyAssociationTestCase
class
ManyToManyBidirectionalAssociationTest
extends
AbstractManyToManyAssociationTestCase
{
{
protected
$_firstField
=
'
car
t_id'
;
protected
$_firstField
=
'
produc
t_id'
;
protected
$_secondField
=
'
product
_id'
;
protected
$_secondField
=
'
category
_id'
;
protected
$_table
=
'ecommerce_
carts_product
s'
;
protected
$_table
=
'ecommerce_
products_categorie
s'
;
private
$firstProduct
;
private
$firstProduct
;
private
$secondProduct
;
private
$secondProduct
;
private
$firstCategory
;
private
$firstCategory
;
...
@@ -77,12 +77,23 @@ class ManyToManyBidirectionalAssociationTest extends AbstractManyToManyAssociati
...
@@ -77,12 +77,23 @@ class ManyToManyBidirectionalAssociationTest extends AbstractManyToManyAssociati
{
{
$this
->
_createLoadingFixture
();
$this
->
_createLoadingFixture
();
list
(
$firstProduct
,
$secondProduct
)
=
$this
->
_findProducts
();
list
(
$firstProduct
,
$secondProduct
)
=
$this
->
_findProducts
();
$categories
=
$firstProduct
->
getCategories
();
$products
=
$categories
[
0
]
->
getProducts
();
$this
->
assertEquals
(
2
,
count
(
$firstProduct
->
getCategories
()));
$this
->
assertEquals
(
2
,
count
(
$secondProduct
->
getCategories
()));
$categories
=
$firstProduct
->
getCategories
();
$firstCategoryProducts
=
$categories
[
0
]
->
getProducts
();
$secondCategoryProducts
=
$categories
[
1
]
->
getProducts
();
$this
->
assertEquals
(
2
,
count
(
$firstCategoryProducts
));
$this
->
assertEquals
(
2
,
count
(
$secondCategoryProducts
));
$this
->
assertTrue
(
$products
[
0
]
instanceof
ECommerceProduct
);
$this
->
assertTrue
(
$firstCategoryProducts
[
0
]
instanceof
ECommerceProduct
);
$this
->
assertTrue
(
$products
[
1
]
instanceof
ECommerceProduct
);
$this
->
assertTrue
(
$firstCategoryProducts
[
1
]
instanceof
ECommerceProduct
);
$this
->
assertCollectionEquals
(
$products
,
$categories
[
1
]
->
getProducts
());
$this
->
assertTrue
(
$secondCategoryProducts
[
0
]
instanceof
ECommerceProduct
);
$this
->
assertTrue
(
$secondCategoryProducts
[
1
]
instanceof
ECommerceProduct
);
$this
->
assertCollectionEquals
(
$firstCategoryProducts
,
$secondCategoryProducts
);
}
}
protected
function
_createLoadingFixture
()
protected
function
_createLoadingFixture
()
...
...
tests/Doctrine/Tests/ORM/Functional/ManyToManyUnidirectionalAssociationTest.php
View file @
31892fb4
...
@@ -41,10 +41,8 @@ class ManyToManyUnidirectionalAssociationTest extends AbstractManyToManyAssociat
...
@@ -41,10 +41,8 @@ class ManyToManyUnidirectionalAssociationTest extends AbstractManyToManyAssociat
$this
->
_em
->
save
(
$this
->
firstCart
);
$this
->
_em
->
save
(
$this
->
firstCart
);
$this
->
_em
->
flush
();
$this
->
_em
->
flush
();
$this
->
assertForeignKeysContain
(
$this
->
firstCart
->
getId
(),
$this
->
assertForeignKeysContain
(
$this
->
firstCart
->
getId
(),
$this
->
firstProduct
->
getId
());
$this
->
firstProduct
->
getId
());
$this
->
assertForeignKeysContain
(
$this
->
firstCart
->
getId
(),
$this
->
secondProduct
->
getId
());
$this
->
assertForeignKeysContain
(
$this
->
firstCart
->
getId
(),
$this
->
secondProduct
->
getId
());
}
}
public
function
testRemovesAManyToManyAssociation
()
public
function
testRemovesAManyToManyAssociation
()
...
@@ -56,10 +54,8 @@ class ManyToManyUnidirectionalAssociationTest extends AbstractManyToManyAssociat
...
@@ -56,10 +54,8 @@ class ManyToManyUnidirectionalAssociationTest extends AbstractManyToManyAssociat
$this
->
_em
->
flush
();
$this
->
_em
->
flush
();
$this
->
assertForeignKeysNotContain
(
$this
->
firstCart
->
getId
(),
$this
->
assertForeignKeysNotContain
(
$this
->
firstCart
->
getId
(),
$this
->
firstProduct
->
getId
());
$this
->
firstProduct
->
getId
());
$this
->
assertForeignKeysContain
(
$this
->
firstCart
->
getId
(),
$this
->
secondProduct
->
getId
());
$this
->
assertForeignKeysContain
(
$this
->
firstCart
->
getId
(),
$this
->
secondProduct
->
getId
());
}
}
public
function
testEagerLoad
()
public
function
testEagerLoad
()
...
...
tests/Doctrine/Tests/OrmFunctionalTestCase.php
View file @
31892fb4
...
@@ -83,6 +83,7 @@ class OrmFunctionalTestCase extends OrmTestCase
...
@@ -83,6 +83,7 @@ class OrmFunctionalTestCase extends OrmTestCase
$conn
->
exec
(
'DELETE FROM ecommerce_shippings'
);
$conn
->
exec
(
'DELETE FROM ecommerce_shippings'
);
$conn
->
exec
(
'DELETE FROM ecommerce_features'
);
$conn
->
exec
(
'DELETE FROM ecommerce_features'
);
$conn
->
exec
(
'DELETE FROM ecommerce_categories'
);
$conn
->
exec
(
'DELETE FROM ecommerce_categories'
);
$conn
->
exec
(
'DELETE FROM ecommerce_products_categories'
);
}
}
if
(
isset
(
$this
->
_usedModelSets
[
'company'
]))
{
if
(
isset
(
$this
->
_usedModelSets
[
'company'
]))
{
$conn
->
exec
(
'DELETE FROM company_persons_friends'
);
$conn
->
exec
(
'DELETE FROM company_persons_friends'
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment