@@ 2073-2093 (lines=21) @@ | ||
2070 | * @param object $document |
|
2071 | * @param array $visited |
|
2072 | */ |
|
2073 | private function cascadeDetach($document, array &$visited) |
|
2074 | { |
|
2075 | $class = $this->dm->getClassMetadata(get_class($document)); |
|
2076 | foreach ($class->fieldMappings as $mapping) { |
|
2077 | if ( ! $mapping['isCascadeDetach']) { |
|
2078 | continue; |
|
2079 | } |
|
2080 | $relatedDocuments = $class->reflFields[$mapping['fieldName']]->getValue($document); |
|
2081 | if (($relatedDocuments instanceof Collection || is_array($relatedDocuments))) { |
|
2082 | if ($relatedDocuments instanceof PersistentCollection) { |
|
2083 | // Unwrap so that foreach() does not initialize |
|
2084 | $relatedDocuments = $relatedDocuments->unwrap(); |
|
2085 | } |
|
2086 | foreach ($relatedDocuments as $relatedDocument) { |
|
2087 | $this->doDetach($relatedDocument, $visited); |
|
2088 | } |
|
2089 | } elseif ($relatedDocuments !== null) { |
|
2090 | $this->doDetach($relatedDocuments, $visited); |
|
2091 | } |
|
2092 | } |
|
2093 | } |
|
2094 | /** |
|
2095 | * Cascades a merge operation to associated documents. |
|
2096 | * |
|
@@ 2193-2214 (lines=22) @@ | ||
2190 | * @param object $document |
|
2191 | * @param array $visited |
|
2192 | */ |
|
2193 | private function cascadeRemove($document, array &$visited) |
|
2194 | { |
|
2195 | $class = $this->dm->getClassMetadata(get_class($document)); |
|
2196 | foreach ($class->fieldMappings as $mapping) { |
|
2197 | if ( ! $mapping['isCascadeRemove']) { |
|
2198 | continue; |
|
2199 | } |
|
2200 | if ($document instanceof Proxy && ! $document->__isInitialized__) { |
|
2201 | $document->__load(); |
|
2202 | } |
|
2203 | ||
2204 | $relatedDocuments = $class->reflFields[$mapping['fieldName']]->getValue($document); |
|
2205 | if (($relatedDocuments instanceof Collection || is_array($relatedDocuments))) { |
|
2206 | // If its a PersistentCollection initialization is intended! No unwrap! |
|
2207 | foreach ($relatedDocuments as $relatedDocument) { |
|
2208 | $this->doRemove($relatedDocument, $visited); |
|
2209 | } |
|
2210 | } elseif ($relatedDocuments !== null) { |
|
2211 | $this->doRemove($relatedDocuments, $visited); |
|
2212 | } |
|
2213 | } |
|
2214 | } |
|
2215 | ||
2216 | /** |
|
2217 | * Acquire a lock on the given document. |