diff --git a/src/Database/Concerns/HasReplication.php b/src/Database/Concerns/HasReplication.php index 4d29a52ae..b9c6422c2 100644 --- a/src/Database/Concerns/HasReplication.php +++ b/src/Database/Concerns/HasReplication.php @@ -69,15 +69,9 @@ protected function replicateRelationsInternal(array $except = null, array $optio foreach ($definitions as $type => $relations) { foreach ($relations as $name => $options) { - if (!$this->isRelationReplicable($name)) { - continue; + if ($this->isRelationReplicable($name, $isMultisite, $isDuplicate)) { + $this->replicateRelationInternal($instance->$name(), $this->$name); } - - if (!$isDuplicate && $isMultisite && $this->isAttributePropagatable($name)) { - continue; - } - - $this->replicateRelationInternal($instance->$name(), $this->$name); } } @@ -113,13 +107,18 @@ protected function replicateRelationInternal($relationObject, $models) * isRelationReplicable determines whether the specified relation should be replicated * when replicateWithRelations() is called instead of save() on the model. Default: true. */ - protected function isRelationReplicable(string $name): bool + protected function isRelationReplicable(string $name, bool $isMultisite, bool $isDuplicate): bool { $relationType = $this->getRelationType($name); if ($relationType === 'morphTo') { return false; } + // Relation is shared via propagation + if (!$isDuplicate && $isMultisite && $this->isAttributePropagatable($name)) { + return false; + } + $definition = $this->getRelationDefinition($name); if (!array_key_exists('replicate', $definition)) { return true;