@@ -1223,7 +1223,6 @@ private function removeDuplicateIndexes(array $indexes): array
1223
1223
private function generateFindByDaoCodeForIndex (Index $ index , string $ beanNamespace , string $ beanClassName ): ?MethodGenerator
1224
1224
{
1225
1225
$ columns = $ index ->getColumns ();
1226
- $ usedBeans = [];
1227
1226
1228
1227
/**
1229
1228
* The list of elements building this index (expressed as columns or foreign keys)
@@ -1249,42 +1248,26 @@ private function generateFindByDaoCodeForIndex(Index $index, string $beanNamespa
1249
1248
}
1250
1249
1251
1250
$ parameters = [];
1252
- //$functionParameters = [];
1253
1251
$ first = true ;
1254
1252
/** @var AbstractBeanPropertyDescriptor $element */
1255
1253
foreach ($ elements as $ element ) {
1256
1254
$ parameter = new ParameterGenerator (ltrim ($ element ->getSafeVariableName (), '$ ' ));
1257
1255
if (!$ first && !($ element ->isCompulsory () && $ index ->isUnique ())) {
1258
1256
$ parameterType = '? ' ;
1259
- //$functionParameter = '?';
1260
1257
} else {
1261
1258
$ parameterType = '' ;
1262
- //$functionParameter = '';
1263
1259
}
1264
1260
$ parameterType .= $ element ->getPhpType ();
1265
1261
$ parameter ->setType ($ parameterType );
1266
1262
if (!$ first && !($ element ->isCompulsory () && $ index ->isUnique ())) {
1267
1263
$ parameter ->setDefaultValue (null );
1268
1264
}
1269
- //$functionParameter .= $element->getPhpType();
1270
- $ elementClassName = $ element ->getClassName ();
1271
- if ($ elementClassName ) {
1272
- $ usedBeans [] = $ beanNamespace .'\\' .$ elementClassName ;
1273
- }
1274
- //$functionParameter .= ' '.$element->getVariableName();
1275
1265
if ($ first ) {
1276
1266
$ first = false ;
1277
- } /*else {
1278
- $functionParameter .= ' = null';
1279
- }*/
1280
- //$functionParameters[] = $functionParameter;
1267
+ }
1281
1268
$ parameters [] = $ parameter ;
1282
1269
}
1283
1270
1284
- //$functionParametersString = implode(', ', $functionParameters);
1285
-
1286
- $ count = 0 ;
1287
-
1288
1271
$ params = [];
1289
1272
$ filterArrayCode = '' ;
1290
1273
$ commentArguments = [];
@@ -1306,12 +1289,11 @@ private function generateFindByDaoCodeForIndex(Index $index, string $beanNamespa
1306
1289
} elseif ($ element instanceof ObjectBeanPropertyDescriptor) {
1307
1290
$ foreignKey = $ element ->getForeignKey ();
1308
1291
$ columns = SafeFunctions::arrayCombine ($ foreignKey ->getLocalColumns (), $ foreignKey ->getForeignColumns ());
1309
- ++$ count ;
1310
1292
$ foreignTable = $ this ->schema ->getTable ($ foreignKey ->getForeignTableName ());
1311
1293
foreach ($ columns as $ localColumn => $ foreignColumn ) {
1312
1294
// 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.
1313
1295
$ targetedElement = new ScalarBeanPropertyDescriptor ($ foreignTable , $ foreignTable ->getColumn ($ foreignColumn ), $ this ->namingStrategy , $ this ->annotationParser );
1314
- if ($ first || $ element ->isCompulsory () && $ index ->isUnique ()) {
1296
+ if ($ first || ( $ element ->isCompulsory () && $ index ->isUnique () )) {
1315
1297
// First parameter for index is not nullable
1316
1298
$ filterArrayCode .= ' ' .var_export ($ localColumn , true ).' => ' .$ element ->getSafeVariableName ().'-> ' .$ targetedElement ->getGetterName ()."(), \n" ;
1317
1299
} else {
@@ -1326,9 +1308,6 @@ private function generateFindByDaoCodeForIndex(Index $index, string $beanNamespa
1326
1308
}
1327
1309
}
1328
1310
1329
- //$paramsString = implode("\n", $params);
1330
-
1331
-
1332
1311
$ methodName = $ this ->namingStrategy ->getFindByIndexMethodName ($ index , $ elements );
1333
1312
1334
1313
$ method = new MethodGenerator ($ methodName );
@@ -1408,7 +1387,11 @@ private function generateOnDeleteCode(): ?MethodGenerator
1408
1387
foreach ($ relationships as $ relationship ) {
1409
1388
if ($ relationship instanceof ObjectBeanPropertyDescriptor) {
1410
1389
$ tdbmFk = ForeignKey::createFromFk ($ relationship ->getForeignKey ());
1411
- $ code .= '$this->setRef( ' .var_export ($ tdbmFk ->getCacheKey (), true ).', null, ' .var_export ($ this ->table ->getName (), true )."); \n" ;
1390
+ $ code .= sprintf (
1391
+ "\$this->setRef(%s, null, %s); \n" ,
1392
+ var_export ($ tdbmFk ->getCacheKey (), true ),
1393
+ var_export ($ this ->table ->getName (), true )
1394
+ );
1412
1395
}
1413
1396
}
1414
1397
@@ -1607,10 +1590,21 @@ private function generateGetForeignKeys(array $fks): MethodGenerator
1607
1590
1608
1591
foreach ($ fks as $ fk ) {
1609
1592
$ tdbmFk = ForeignKey::createFromFk ($ fk );
1593
+
1594
+ // Override column name in case of inheritance
1595
+ $ foreignTableName = $ fk ->getForeignTableName ();
1596
+ $ foreignColumns = $ fk ->getUnquotedForeignColumns ();
1597
+ foreach ($ foreignColumns as $ key => $ foreignColumn ) {
1598
+ $ descriptor = $ this ->findScalarPropertyDescriptorInTable ($ foreignTableName , $ foreignColumn );
1599
+ if ($ descriptor instanceof InheritanceReferencePropertyDescriptor) {
1600
+ $ foreignColumns [$ key ] = $ this ->foreignColumnNameInInheritance ($ descriptor , $ foreignColumn );
1601
+ }
1602
+ }
1603
+
1610
1604
$ fkArray [$ tdbmFk ->getCacheKey ()] = [
1611
1605
ForeignKey::FOREIGN_TABLE => $ fk ->getForeignTableName (),
1612
1606
ForeignKey::LOCAL_COLUMNS => $ fk ->getUnquotedLocalColumns (),
1613
- ForeignKey::FOREIGN_COLUMNS => $ fk -> getUnquotedForeignColumns () ,
1607
+ ForeignKey::FOREIGN_COLUMNS => $ foreignColumns ,
1614
1608
];
1615
1609
}
1616
1610
@@ -1646,6 +1640,39 @@ private function generateGetForeignKeys(array $fks): MethodGenerator
1646
1640
return $ method ;
1647
1641
}
1648
1642
1643
+ private function findScalarPropertyDescriptorInTable (string $ tableName , string $ columnName ): ?ScalarBeanPropertyDescriptor
1644
+ {
1645
+ $ beanDescriptor = $ this ->registry ->getBeanForTableName ($ tableName );
1646
+ foreach ($ beanDescriptor ->getBeanPropertyDescriptors () as $ descriptor ) {
1647
+ if ($ descriptor instanceof ScalarBeanPropertyDescriptor && $ descriptor ->getColumnName () === $ columnName ) {
1648
+ return $ descriptor ;
1649
+ }
1650
+ }
1651
+ return null ;
1652
+ }
1653
+
1654
+ /**
1655
+ * Extract the foreign column name from a InheritanceReferencePropertyDescriptor
1656
+ */
1657
+ private function foreignColumnNameInInheritance (InheritanceReferencePropertyDescriptor $ descriptor , string $ column ): string
1658
+ {
1659
+ $ nonReferenceDescriptor = $ descriptor ->getNonScalarReferencedPropertyDescriptor ();
1660
+ if ($ nonReferenceDescriptor instanceof ScalarBeanPropertyDescriptor) {
1661
+ return $ nonReferenceDescriptor ->getColumnName ();
1662
+ }
1663
+ if ($ nonReferenceDescriptor instanceof ObjectBeanPropertyDescriptor) {
1664
+ $ foreignKey = $ nonReferenceDescriptor ->getForeignKey ();
1665
+ $ localColumns = $ foreignKey ->getLocalColumns ();
1666
+ $ foreignColumns = $ foreignKey ->getForeignColumns ();
1667
+ foreach ($ localColumns as $ key => $ localColumn ) {
1668
+ if ($ localColumn === $ column ) {
1669
+ return $ foreignColumns [$ key ];
1670
+ }
1671
+ }
1672
+ }
1673
+ return $ column ;
1674
+ }
1675
+
1649
1676
/**
1650
1677
* @param mixed $var
1651
1678
* @param string $indent
0 commit comments