From e322f1e75a751e086c978557400b0f6072d48bed Mon Sep 17 00:00:00 2001 From: Tom Nunn Date: Thu, 12 Feb 2026 19:00:32 +0000 Subject: [PATCH 1/4] Add test for creating model with has-one relationship --- .../Database/Builder/IsDatabaseModelTest.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/Integration/Database/Builder/IsDatabaseModelTest.php b/tests/Integration/Database/Builder/IsDatabaseModelTest.php index 8086c3364..4d050ad89 100644 --- a/tests/Integration/Database/Builder/IsDatabaseModelTest.php +++ b/tests/Integration/Database/Builder/IsDatabaseModelTest.php @@ -183,6 +183,24 @@ public function test_all_with_relations(): void $this->assertEquals(1, $book->author->id->value); } + public function test_create_with_hasone_relation(): void + { + $this->database->migrate( + CreateMigrationsTable::class, + CreateBookTable::class, + CreateIsbnTable::class, + ); + + $book = Book::create( + title: 'Book Title', + isbn: Isbn::new(value: '123-456-789'), + ); + + $book = Book::findById($book->id)->load('isbn'); + + $this->assertSame('123-456-789', $book->isbn->value); + } + public function test_missing_relation_exception(): void { $this->database->migrate( From beda3a8764d3ec1920ba01d02d4fb5bd252e18e8 Mon Sep 17 00:00:00 2001 From: Tom Nunn Date: Thu, 12 Feb 2026 19:04:46 +0000 Subject: [PATCH 2/4] Fix infinite loop when creating a model with a hasone relationship --- .../src/Builder/QueryBuilders/InsertQueryBuilder.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/database/src/Builder/QueryBuilders/InsertQueryBuilder.php b/packages/database/src/Builder/QueryBuilders/InsertQueryBuilder.php index a438e9035..feb870527 100644 --- a/packages/database/src/Builder/QueryBuilders/InsertQueryBuilder.php +++ b/packages/database/src/Builder/QueryBuilders/InsertQueryBuilder.php @@ -289,11 +289,12 @@ private function handleStandardHasOneRelation(HasOne $hasOne, object|array $rela } // TODO: we might need to bake this into the naming strategy class - $foreignKeyColumn = Intl\singularize_last_word($ownerModel->getTableName()) . '_' . $ownerModel->getPrimaryKey(); + $foreignKeyProperty = Intl\singularize_last_word($ownerModel->getTableName()); + $foreignKeyColumn = $foreignKeyProperty . '_' . $ownerModel->getPrimaryKey(); $preparedData = is_array($relation) ? [...$relation, ...[$foreignKeyColumn => $parentId->value]] - : [...$this->convertObjectToArray($relation), ...[$foreignKeyColumn => $parentId->value]]; + : [...$this->convertObjectToArray($relation, [$foreignKeyProperty]), ...[$foreignKeyColumn => $parentId->value]]; $relatedModelQuery = new InsertQueryBuilder( model: $hasOne->property->getType()->asClass(), From b53b45a4d6534ff1f9628eb68c977a4832591434 Mon Sep 17 00:00:00 2001 From: Tom Nunn Date: Fri, 13 Feb 2026 07:47:12 +0000 Subject: [PATCH 3/4] Create Author table to fix test in CI --- tests/Integration/Database/Builder/IsDatabaseModelTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Integration/Database/Builder/IsDatabaseModelTest.php b/tests/Integration/Database/Builder/IsDatabaseModelTest.php index 4d050ad89..7609d97af 100644 --- a/tests/Integration/Database/Builder/IsDatabaseModelTest.php +++ b/tests/Integration/Database/Builder/IsDatabaseModelTest.php @@ -187,6 +187,7 @@ public function test_create_with_hasone_relation(): void { $this->database->migrate( CreateMigrationsTable::class, + CreateAuthorTable::class, CreateBookTable::class, CreateIsbnTable::class, ); From f5e8cae85d6f4ad5b5ed805da17d151312e59a24 Mon Sep 17 00:00:00 2001 From: Tom Nunn Date: Fri, 13 Feb 2026 08:31:14 +0000 Subject: [PATCH 4/4] Create Publishers table to fix test in CI --- tests/Integration/Database/Builder/IsDatabaseModelTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Integration/Database/Builder/IsDatabaseModelTest.php b/tests/Integration/Database/Builder/IsDatabaseModelTest.php index 7609d97af..1abc73db7 100644 --- a/tests/Integration/Database/Builder/IsDatabaseModelTest.php +++ b/tests/Integration/Database/Builder/IsDatabaseModelTest.php @@ -187,6 +187,7 @@ public function test_create_with_hasone_relation(): void { $this->database->migrate( CreateMigrationsTable::class, + CreatePublishersTable::class, CreateAuthorTable::class, CreateBookTable::class, CreateIsbnTable::class,