diff --git a/framework/db/ar/CActiveFinder.php b/framework/db/ar/CActiveFinder.php index 88342f60b9..5db1a2ba5c 100644 --- a/framework/db/ar/CActiveFinder.php +++ b/framework/db/ar/CActiveFinder.php @@ -356,6 +356,9 @@ class CJoinElement public $rawTableAlias; private $_finder; + /** + * @var CDbCommandBuilder $_builder + */ private $_builder; private $_parent; private $_pkAlias; // string or name=>alias @@ -1170,25 +1173,21 @@ private function joinManyMany($joinTable,$fks,$parent) } } - if(!$fkDefined) - { - $parentCondition=array(); - $childCondition=array(); - foreach($fks as $i=>$fk) - { - if($i_table->primaryKey)) - { - $pk=is_array($parent->_table->primaryKey) ? $parent->_table->primaryKey[$i] : $parent->_table->primaryKey; - $parentCondition[$pk]=$parent->getColumnPrefix().$schema->quoteColumnName($pk).'='.$joinAlias.'.'.$schema->quoteColumnName($fk); - } - else - { - $j=$i-count($parent->_table->primaryKey); - $pk=is_array($this->_table->primaryKey) ? $this->_table->primaryKey[$j] : $this->_table->primaryKey; - $childCondition[$pk]=$this->getColumnPrefix().$schema->quoteColumnName($pk).'='.$joinAlias.'.'.$schema->quoteColumnName($fk); - } - } - } + if (!$fkDefined) { + $parentCondition = array(); + $childCondition = array(); + $primaryKeyCount = is_array($parent->_table->primaryKey) ? count($parent->_table->primaryKey) : 1; + foreach ($fks as $i => $fk) { + if ($i < $primaryKeyCount) { + $pk = is_array($parent->_table->primaryKey) ? $parent->_table->primaryKey[$i] : $parent->_table->primaryKey; + $parentCondition[$pk] = $parent->getColumnPrefix() . $schema->quoteColumnName($pk) . '=' . $joinAlias . '.' . $schema->quoteColumnName($fk); + } else { + $j = $i - $primaryKeyCount; + $pk = is_array($this->_table->primaryKey) ? $this->_table->primaryKey[$j] : $this->_table->primaryKey; + $childCondition[$pk] = $this->getColumnPrefix() . $schema->quoteColumnName($pk) . '=' . $joinAlias . '.' . $schema->quoteColumnName($fk); + } + } + } if($parentCondition!==array() && $childCondition!==array()) {