diff options
-rw-r--r-- | framework/Data/ActiveRecord/Relations/TActiveRecordRelation.php | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/framework/Data/ActiveRecord/Relations/TActiveRecordRelation.php b/framework/Data/ActiveRecord/Relations/TActiveRecordRelation.php index 4c238801..300dc26c 100644 --- a/framework/Data/ActiveRecord/Relations/TActiveRecordRelation.php +++ b/framework/Data/ActiveRecord/Relations/TActiveRecordRelation.php @@ -113,16 +113,19 @@ abstract class TActiveRecordRelation $tableInfo=$from;
if($from instanceof TActiveRecord)
$tableInfo = $gateway->getRecordTableInfo($from);
+ //find first non-empty FK
foreach($tableInfo->getForeignKeys() as $fkeys)
{
if(strtolower($fkeys['table'])===strtolower($matchingTableName))
{
- if(!$loose && $this->getContext()->hasFkField())
- return $this->getFkFields($fkeys['keys']);
- else
- return $fkeys['keys'];
+ $hasFkField = !$loose && $this->getContext()->hasFkField();
+ $key = $hasFkField ? $this->getFkFields($fkeys['keys']) : $fkeys['keys'];
+ if(!empty($key))
+ return $key;
}
}
+
+ //none found
$matching = $gateway->getRecordTableInfo($matchesRecord)->getTableFullName();
throw new TActiveRecordException('ar_relations_missing_fk',
$tableInfo->getTableFullName(), $matching);
|