Skip to content

Commit d3bdff7

Browse files
author
Tom Nunn
committed
fix(database): prevent infinite loop when creating a model with a has-one relationship
1 parent e30b218 commit d3bdff7

2 files changed

Lines changed: 5 additions & 2 deletions

File tree

packages/database/src/Builder/QueryBuilders/InsertQueryBuilder.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,11 +289,12 @@ private function handleStandardHasOneRelation(HasOne $hasOne, object|array $rela
289289
}
290290

291291
// TODO: we might need to bake this into the naming strategy class
292-
$foreignKeyColumn = Intl\singularize_last_word($ownerModel->getTableName()) . '_' . $ownerModel->getPrimaryKey();
292+
$foreignKeyProperty = Intl\singularize_last_word($ownerModel->getTableName());
293+
$foreignKeyColumn = $foreignKeyProperty . '_' . $ownerModel->getPrimaryKey();
293294

294295
$preparedData = is_array($relation)
295296
? [...$relation, ...[$foreignKeyColumn => $parentId->value]]
296-
: [...$this->convertObjectToArray($relation), ...[$foreignKeyColumn => $parentId->value]];
297+
: [...$this->convertObjectToArray($relation, [$foreignKeyProperty]), ...[$foreignKeyColumn => $parentId->value]];
297298

298299
$relatedModelQuery = new InsertQueryBuilder(
299300
model: $hasOne->property->getType()->asClass(),

tests/Integration/Database/Builder/IsDatabaseModelTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,8 @@ public function test_create_with_hasone_relation(): void
187187
{
188188
$this->database->migrate(
189189
CreateMigrationsTable::class,
190+
CreatePublishersTable::class,
191+
CreateAuthorTable::class,
190192
CreateBookTable::class,
191193
CreateIsbnTable::class,
192194
);

0 commit comments

Comments
 (0)