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(), diff --git a/tests/Integration/Database/Builder/IsDatabaseModelTest.php b/tests/Integration/Database/Builder/IsDatabaseModelTest.php index 8086c3364..1abc73db7 100644 --- a/tests/Integration/Database/Builder/IsDatabaseModelTest.php +++ b/tests/Integration/Database/Builder/IsDatabaseModelTest.php @@ -183,6 +183,26 @@ 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, + CreatePublishersTable::class, + CreateAuthorTable::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(