diff --git a/src/Database/Concerns/HasReplication.php b/src/Database/Concerns/HasReplication.php index b8d8aea2f..5008fdbc1 100644 --- a/src/Database/Concerns/HasReplication.php +++ b/src/Database/Concerns/HasReplication.php @@ -49,4 +49,22 @@ public function newReplicationInstance($attributes) return $instance; } + + /** + * isRelationReplicable determines whether the specified relation should be replicated + */ + public function isRelationReplicable(string $name): bool + { + $relationType = $this->getRelationType($name); + if ($relationType === 'morphTo') { + return false; + } + + $definition = $this->getRelationDefinition($name); + if (!array_key_exists('replicate', $definition)) { + return true; + } + + return (bool) $definition['replicate']; + } } diff --git a/src/Database/Relations/AttachOne.php b/src/Database/Relations/AttachOne.php index 52d7c386b..fac19c4e2 100644 --- a/src/Database/Relations/AttachOne.php +++ b/src/Database/Relations/AttachOne.php @@ -40,7 +40,7 @@ public function __construct(Builder $query, Model $parent, $type, $id, $isPublic public function setSimpleValue($value) { if (is_array($value)) { - $value = reset($value); + $value = current($value); } // Nulling the relationship diff --git a/src/Database/Relations/HasOne.php b/src/Database/Relations/HasOne.php index 65c333760..4dc22e886 100644 --- a/src/Database/Relations/HasOne.php +++ b/src/Database/Relations/HasOne.php @@ -34,7 +34,7 @@ public function __construct(Builder $query, Model $parent, $foreignKey, $localKe public function setSimpleValue($value) { if (is_array($value)) { - return; + $value = current($value); } // Nulling the relationship diff --git a/src/Database/Relations/MorphOne.php b/src/Database/Relations/MorphOne.php index 0e6bbd25a..cb312acfc 100644 --- a/src/Database/Relations/MorphOne.php +++ b/src/Database/Relations/MorphOne.php @@ -34,7 +34,7 @@ public function __construct(Builder $query, Model $parent, $type, $id, $localKey public function setSimpleValue($value) { if (is_array($value)) { - return; + $value = current($value); } // Nulling the relationship diff --git a/src/Database/Replicator.php b/src/Database/Replicator.php index 135ed4321..88dbb9d17 100644 --- a/src/Database/Replicator.php +++ b/src/Database/Replicator.php @@ -141,11 +141,6 @@ protected function replicateRelationInternal($relationObject, $models) */ protected function isRelationReplicable(string $name): bool { - $relationType = $this->model->getRelationType($name); - if ($relationType === 'morphTo') { - return false; - } - // Relation is shared via propagation if ( !$this->isDuplicating && @@ -155,12 +150,7 @@ protected function isRelationReplicable(string $name): bool return false; } - $definition = $this->model->getRelationDefinition($name); - if (!array_key_exists('replicate', $definition)) { - return true; - } - - return (bool) $definition['replicate']; + return $this->model->isRelationReplicable($name); } /**