protected function getAssociationJoin($foreignKeys, $indexValues, $sourceKeys)
{
$refInfo = $this->getAssociationTable();
$fkInfo = $this->getForeignTable();
$refTable = $refInfo->getTableFullName();
$fkTable = $fkInfo->getTableFullName();
$joins = array();
$hasAssociationColumns = count($this->_association_columns) > 0;
$i = 0;
foreach ($foreignKeys as $ref => $fk) {
if ($hasAssociationColumns) {
$refField = $refInfo->getColumn($this->_association_columns[$i++])->getColumnName();
} else {
$refField = $refInfo->getColumn($ref)->getColumnName();
}
$fkField = $fkInfo->getColumn($fk)->getColumnName();
$joins[] = "{$fkTable}.{$fkField} = {$refTable}.{$refField}";
}
$joinCondition = implode(' AND ', $joins);
$index = $this->getCommandBuilder()->getIndexKeyCondition($refInfo, array_keys($sourceKeys), $indexValues);
return "INNER JOIN {$refTable} ON ({$joinCondition}) AND {$index}";
}