|  |  | @ -873,6 +873,8 @@ abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | 				/** @var $viaClass ActiveRecord */ |  |  |  | 				/** @var $viaClass ActiveRecord */ | 
			
		
	
		
		
			
				
					
					|  |  |  | 				$viaClass = $viaQuery->modelClass; |  |  |  | 				$viaClass = $viaQuery->modelClass; | 
			
		
	
		
		
			
				
					
					|  |  |  | 				$viaTable = $viaClass::tableName(); |  |  |  | 				$viaTable = $viaClass::tableName(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				// unset $viaName so that it can be reloaded to reflect the change | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				unset($this->_related[$viaName]); | 
			
		
	
		
		
			
				
					
					|  |  |  | 			} else { |  |  |  | 			} else { | 
			
		
	
		
		
			
				
					
					|  |  |  | 				$viaQuery = $relation->via; |  |  |  | 				$viaQuery = $relation->via; | 
			
		
	
		
		
			
				
					
					|  |  |  | 				$viaTable = reset($relation->via->from); |  |  |  | 				$viaTable = reset($relation->via->from); | 
			
		
	
	
		
		
			
				
					|  |  | @ -889,8 +891,18 @@ abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | 			} |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  | 			$command = $this->getDbConnection()->createCommand(); |  |  |  | 			$command = $this->getDbConnection()->createCommand(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 			$command->insert($viaTable, $columns)->execute(); |  |  |  | 			$command->insert($viaTable, $columns)->execute(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			$name = strtolower($name); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			if (!$relation->multiple) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				$this->_related[$name] = $model; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			} elseif (isset($this->_related[$name])) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				if ($relation->indexBy !== null) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					$indexBy = $relation->indexBy; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					$this->_related[$name][$model->$indexBy] = $model; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				} else { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					$this->_related[$name][] = $model; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  | 			return; |  |  |  | 			return; | 
			
		
	
		
		
			
				
					
					|  |  |  | 			// todo: update $viaName |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 		$keys = $model->primaryKey(); |  |  |  | 		$keys = $model->primaryKey(); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		$p1 = true; |  |  |  | 		$p1 = true; | 
			
		
	
	
		
		
			
				
					|  |  | @ -953,7 +965,18 @@ abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} else { |  |  |  | 		} else { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			throw new Exception(''); |  |  |  | 			throw new Exception(''); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// todo: update relation models |  |  |  | 
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		if (!$relation->multiple) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			$this->_related[$name] = $model; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		} elseif (isset($this->_related[$name])) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			if ($relation->indexBy !== null) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				$indexBy = $relation->indexBy; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				$this->_related[$name][$model->$indexBy] = $model; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			} else { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				$this->_related[$name][] = $model; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		return; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	/** |  |  |  | 	/** | 
			
		
	
	
		
		
			
				
					|  |  | @ -1022,7 +1045,17 @@ abstract class ActiveRecord extends Model | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} else { |  |  |  | 		} else { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			throw new Exception(''); |  |  |  | 			throw new Exception(''); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 		// todo: update relation models |  |  |  | 
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		if (!$relation->multiple) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			unset($this->_related[$name]); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		} elseif (isset($this->_related[$name])) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			/** @var $b ActiveRecord */ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			foreach ($this->_related[$name] as $a => $b) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				if ($model->getPrimaryKey() == $b->getPrimaryKey()) { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 					unset($this->_related[$name][$a]); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 				} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	/** |  |  |  | 	/** | 
			
		
	
	
		
		
			
				
					|  |  | 
 |