Skip to content

Commit 94e51b0

Browse files
committed
Deeper Composite FK: Implementation
1 parent 1475df5 commit 94e51b0

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

src/Utils/ObjectBeanPropertyDescriptor.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -261,11 +261,13 @@ private function getLazySerializeCode(string $propertyAccess): string
261261
if ($descriptor instanceof InheritanceReferencePropertyDescriptor) {
262262
$descriptor = $descriptor->getNonScalarReferencedPropertyDescriptor();
263263
}
264+
$indexName = ltrim($descriptor->getVariableName(), '$');
265+
$columnGetterName = $descriptor->getGetterName();
264266
if ($descriptor instanceof ObjectBeanPropertyDescriptor) {
265-
$rows[] = trim($descriptor->getLazySerializeCode($propertyAccess), '[]');
267+
$varName = '$o' . lcfirst($indexName);
268+
$lazySerializeCode = $descriptor->getLazySerializeCode($varName);
269+
$rows[] = "'$indexName' => ($varName = $propertyAccess->$columnGetterName()) ? $lazySerializeCode : null";
266270
} elseif ($descriptor instanceof ScalarBeanPropertyDescriptor) {
267-
$indexName = ltrim($descriptor->getVariableName(), '$');
268-
$columnGetterName = $descriptor->getGetterName();
269271
$rows[] = "'$indexName' => $propertyAccess->$columnGetterName()";
270272
} else {
271273
throw new TDBMException('PropertyDescriptor of class `' . get_class($descriptor) . '` cannot be serialized.');
@@ -277,6 +279,9 @@ private function getLazySerializeCode(string $propertyAccess): string
277279
private function getBeanPropertyDescriptor(string $column): AbstractBeanPropertyDescriptor
278280
{
279281
foreach ($this->foreignBeanDescriptor->getBeanPropertyDescriptors() as $descriptor) {
282+
if ($descriptor instanceof ObjectBeanPropertyDescriptor && in_array($column, $descriptor->getForeignKey()->getLocalColumns(), true)) {
283+
return $descriptor;
284+
}
280285
if ($descriptor instanceof ScalarBeanPropertyDescriptor && $descriptor->getColumnName() === $column) {
281286
return $descriptor;
282287
}

tests/TDBMDaoGeneratorTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2165,7 +2165,7 @@ public function testLazyStopRecursionOnCompositeForeignKey(): void
21652165
$compositeFkSourceDao = new CompositeFkSourceDao($this->tdbmService);
21662166
$compositeFkSourceBean = $compositeFkSourceDao->getById(1);
21672167
$json = $compositeFkSourceBean->jsonSerialize(true);
2168-
$this->assertEquals(1, $json['compositeFkTarget']['id1']);
2168+
$this->assertEquals(1, $json['compositeFkTarget']['1']['id']);
21692169
$this->assertEquals(1, $json['compositeFkTarget']['id2']);
21702170
}
21712171

0 commit comments

Comments
 (0)