@@ -1275,7 +1275,6 @@ private function removeDuplicateIndexes(array $indexes): array
1275
1275
private function generateFindByDaoCodeForIndex (Index $ index , string $ beanNamespace , string $ beanClassName ): ?MethodGenerator
1276
1276
{
1277
1277
$ columns = $ index ->getColumns ();
1278
- $ usedBeans = [];
1279
1278
1280
1279
/**
1281
1280
* The list of elements building this index (expressed as columns or foreign keys)
@@ -1301,42 +1300,26 @@ private function generateFindByDaoCodeForIndex(Index $index, string $beanNamespa
1301
1300
}
1302
1301
1303
1302
$ parameters = [];
1304
- //$functionParameters = [];
1305
1303
$ first = true ;
1306
1304
/** @var AbstractBeanPropertyDescriptor $element */
1307
1305
foreach ($ elements as $ element ) {
1308
1306
$ parameter = new ParameterGenerator (ltrim ($ element ->getSafeVariableName (), '$ ' ));
1309
1307
if (!$ first && !($ element ->isCompulsory () && $ index ->isUnique ())) {
1310
1308
$ parameterType = '? ' ;
1311
- //$functionParameter = '?';
1312
1309
} else {
1313
1310
$ parameterType = '' ;
1314
- //$functionParameter = '';
1315
1311
}
1316
1312
$ parameterType .= $ element ->getPhpType ();
1317
1313
$ parameter ->setType ($ parameterType );
1318
1314
if (!$ first && !($ element ->isCompulsory () && $ index ->isUnique ())) {
1319
1315
$ parameter ->setDefaultValue (null );
1320
1316
}
1321
- //$functionParameter .= $element->getPhpType();
1322
- $ elementClassName = $ element ->getClassName ();
1323
- if ($ elementClassName ) {
1324
- $ usedBeans [] = $ beanNamespace .'\\' .$ elementClassName ;
1325
- }
1326
- //$functionParameter .= ' '.$element->getVariableName();
1327
1317
if ($ first ) {
1328
1318
$ first = false ;
1329
- } /*else {
1330
- $functionParameter .= ' = null';
1331
- }*/
1332
- //$functionParameters[] = $functionParameter;
1319
+ }
1333
1320
$ parameters [] = $ parameter ;
1334
1321
}
1335
1322
1336
- //$functionParametersString = implode(', ', $functionParameters);
1337
-
1338
- $ count = 0 ;
1339
-
1340
1323
$ params = [];
1341
1324
$ filterArrayCode = '' ;
1342
1325
$ commentArguments = [];
@@ -1358,12 +1341,11 @@ private function generateFindByDaoCodeForIndex(Index $index, string $beanNamespa
1358
1341
} elseif ($ element instanceof ObjectBeanPropertyDescriptor) {
1359
1342
$ foreignKey = $ element ->getForeignKey ();
1360
1343
$ columns = SafeFunctions::arrayCombine ($ foreignKey ->getUnquotedLocalColumns (), $ foreignKey ->getUnquotedForeignColumns ());
1361
- ++$ count ;
1362
1344
$ foreignTable = $ this ->schema ->getTable ($ foreignKey ->getForeignTableName ());
1363
1345
foreach ($ columns as $ localColumn => $ foreignColumn ) {
1364
1346
// TODO: a foreign key could point to another foreign key. In this case, there is no getter for the pointed column. We don't support this case.
1365
1347
$ targetedElement = new ScalarBeanPropertyDescriptor ($ foreignTable , $ foreignTable ->getColumn ($ foreignColumn ), $ this ->namingStrategy , $ this ->annotationParser );
1366
- if ($ first || $ element ->isCompulsory () && $ index ->isUnique ()) {
1348
+ if ($ first || ( $ element ->isCompulsory () && $ index ->isUnique () )) {
1367
1349
// First parameter for index is not nullable
1368
1350
$ filterArrayCode .= ' ' .var_export ($ localColumn , true ).' => ' .$ element ->getSafeVariableName ().'-> ' .$ targetedElement ->getGetterName ()."(), \n" ;
1369
1351
} else {
@@ -1378,9 +1360,6 @@ private function generateFindByDaoCodeForIndex(Index $index, string $beanNamespa
1378
1360
}
1379
1361
}
1380
1362
1381
- //$paramsString = implode("\n", $params);
1382
-
1383
-
1384
1363
$ methodName = $ this ->namingStrategy ->getFindByIndexMethodName ($ index , $ elements );
1385
1364
1386
1365
$ method = new MethodGenerator ($ methodName );
@@ -1459,7 +1438,11 @@ private function generateOnDeleteCode(): ?MethodGenerator
1459
1438
foreach ($ relationships as $ relationship ) {
1460
1439
if ($ relationship instanceof ObjectBeanPropertyDescriptor) {
1461
1440
$ tdbmFk = ForeignKey::createFromFk ($ relationship ->getForeignKey ());
1462
- $ code .= '$this->setRef( ' .var_export ($ tdbmFk ->getCacheKey (), true ).', null, ' .var_export ($ this ->table ->getName (), true )."); \n" ;
1441
+ $ code .= sprintf (
1442
+ "\$this->setRef(%s, null, %s); \n" ,
1443
+ var_export ($ tdbmFk ->getCacheKey (), true ),
1444
+ var_export ($ this ->table ->getName (), true )
1445
+ );
1463
1446
}
1464
1447
}
1465
1448
@@ -1678,10 +1661,21 @@ private function generateGetForeignKeys(array $fks): MethodGenerator
1678
1661
1679
1662
foreach ($ fks as $ fk ) {
1680
1663
$ tdbmFk = ForeignKey::createFromFk ($ fk );
1664
+
1665
+ // Override column name in case of inheritance
1666
+ $ foreignTableName = $ fk ->getForeignTableName ();
1667
+ $ foreignColumns = $ fk ->getUnquotedForeignColumns ();
1668
+ foreach ($ foreignColumns as $ key => $ foreignColumn ) {
1669
+ $ descriptor = $ this ->findScalarPropertyDescriptorInTable ($ foreignTableName , $ foreignColumn );
1670
+ if ($ descriptor instanceof InheritanceReferencePropertyDescriptor) {
1671
+ $ foreignColumns [$ key ] = $ this ->foreignColumnNameInInheritance ($ descriptor , $ foreignColumn );
1672
+ }
1673
+ }
1674
+
1681
1675
$ fkArray [$ tdbmFk ->getCacheKey ()] = [
1682
1676
ForeignKey::FOREIGN_TABLE => $ fk ->getForeignTableName (),
1683
1677
ForeignKey::LOCAL_COLUMNS => $ fk ->getUnquotedLocalColumns (),
1684
- ForeignKey::FOREIGN_COLUMNS => $ fk -> getUnquotedForeignColumns () ,
1678
+ ForeignKey::FOREIGN_COLUMNS => $ foreignColumns ,
1685
1679
];
1686
1680
}
1687
1681
@@ -1717,6 +1711,39 @@ private function generateGetForeignKeys(array $fks): MethodGenerator
1717
1711
return $ method ;
1718
1712
}
1719
1713
1714
+ private function findScalarPropertyDescriptorInTable (string $ tableName , string $ columnName ): ?ScalarBeanPropertyDescriptor
1715
+ {
1716
+ $ beanDescriptor = $ this ->registry ->getBeanForTableName ($ tableName );
1717
+ foreach ($ beanDescriptor ->getBeanPropertyDescriptors () as $ descriptor ) {
1718
+ if ($ descriptor instanceof ScalarBeanPropertyDescriptor && $ descriptor ->getColumnName () === $ columnName ) {
1719
+ return $ descriptor ;
1720
+ }
1721
+ }
1722
+ return null ;
1723
+ }
1724
+
1725
+ /**
1726
+ * Extract the foreign column name from a InheritanceReferencePropertyDescriptor
1727
+ */
1728
+ private function foreignColumnNameInInheritance (InheritanceReferencePropertyDescriptor $ descriptor , string $ column ): string
1729
+ {
1730
+ $ nonReferenceDescriptor = $ descriptor ->getNonScalarReferencedPropertyDescriptor ();
1731
+ if ($ nonReferenceDescriptor instanceof ScalarBeanPropertyDescriptor) {
1732
+ return $ nonReferenceDescriptor ->getColumnName ();
1733
+ }
1734
+ if ($ nonReferenceDescriptor instanceof ObjectBeanPropertyDescriptor) {
1735
+ $ foreignKey = $ nonReferenceDescriptor ->getForeignKey ();
1736
+ $ localColumns = $ foreignKey ->getLocalColumns ();
1737
+ $ foreignColumns = $ foreignKey ->getForeignColumns ();
1738
+ foreach ($ localColumns as $ key => $ localColumn ) {
1739
+ if ($ localColumn === $ column ) {
1740
+ return $ foreignColumns [$ key ];
1741
+ }
1742
+ }
1743
+ }
1744
+ return $ column ;
1745
+ }
1746
+
1720
1747
/**
1721
1748
* @param mixed $var
1722
1749
* @param string $indent
0 commit comments