⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dbo_source.php.svn-base

📁 j2me is based on j2mepolish, client & server for mobile application. server part
💻 SVN-BASE
📖 第 1 页 / 共 3 页
字号:
		if (!empty($queryData['fields'])) {			$this->__bypass = true;		}		foreach($model->__associations as $type) {			foreach($model->{$type} as $assoc => $assocData) {				if ($model->recursive > -1) {					$linkModel =& $model->{$assoc};					$external = isset($assocData['external']);					if ($model->name == $linkModel->name && $type != 'hasAndBelongsToMany' && $type != 'hasMany') {						if (true === $this->generateSelfAssociationQuery($model, $linkModel, $type, $assoc, $assocData, $queryData, $external, $null)) {							$linkedModels[] = $type . '/' . $assoc;						}					} else {						if ($model->useDbConfig == $linkModel->useDbConfig) {							if (true === $this->generateAssociationQuery($model, $linkModel, $type, $assoc, $assocData, $queryData, $external, $null)) {								$linkedModels[] = $type . '/' . $assoc;							}						}					}				}			}		}		// Build final query SQL		$query = $this->generateAssociationQuery($model, $null, null, null, null, $queryData, false, $null);		$resultSet = $this->fetchAll($query, $model->cacheQueries, $model->name);		$filtered = $this->__filterResults($resultSet, $model);		if ($model->recursive > 0) {			foreach($model->__associations as $type) {				foreach($model->{$type} as $assoc => $assocData) {					$db = null;					$linkModel =& $model->{$assoc};					if (!in_array($type . '/' . $assoc, $linkedModels)) {						if ($model->useDbConfig == $linkModel->useDbConfig) {							$db =& $this;						} else {							$db =& ConnectionManager::getDataSource($linkModel->useDbConfig);						}					} elseif($model->recursive > 1 && ($type == 'belongsTo' || $type == 'hasOne')) {						// Do recursive joins on belongsTo and hasOne relationships						$db =& $this;					} else {						unset ($db);					}					if (isset($db) && $db != null) {						$stack = array($assoc);						$db->queryAssociation($model, $linkModel, $type, $assoc, $assocData, $array, true, $resultSet, $model->recursive - 1, $stack);						unset($db);					}				}			}			$this->__filterResults($resultSet, $model, $filtered);		}		if (!is_null($recursive)) {			$model->recursive = $_recursive;		}		return $resultSet;	}/** * Private method.  Passes association results thru afterFind filter of corresponding model * * @param unknown_type $results * @param unknown_type $model * @param unknown_type $filtered * @return unknown */	function __filterResults(&$results, &$model, $filtered = array()) {		$filtering = array();		$associations = am($model->belongsTo, $model->hasOne, $model->hasMany, $model->hasAndBelongsToMany);		$count = count($results);		for($i = 0; $i < $count; $i++) {			if (is_array($results[$i])) {				$keys = array_keys($results[$i]);				$count2 = count($keys);				for($j = 0; $j < $count2; $j++) {					$key = $keys[$j];					if (isset($associations[$key])) {						$className = $associations[$key]['className'];					} else {						$className = $key;					}					if ($model->name != $className && !in_array($key, $filtered)) {						if (!in_array($key, $filtering)) {							$filtering[] = $key;						}						if (isset($model->{$className}) && is_object($model->{$className})) {							$data = $model->{$className}->afterFind(array(array($key => $results[$i][$key])));						}						$results[$i][$key] = $data[0][$key];					}				}			}		}		return $filtering;	}/** * Enter description here... * * @param Model $model * @param unknown_type $linkModel * @param string $type Association type * @param unknown_type $association * @param unknown_type $assocData * @param unknown_type $queryData * @param unknown_type $external * @param unknown_type $resultSet * @param integer $recursive Number of levels of association * @param array $stack */	function queryAssociation(&$model, &$linkModel, $type, $association, $assocData, &$queryData, $external = false, &$resultSet, $recursive, $stack) {		$query = $this->generateAssociationQuery($model, $linkModel, $type, $association, $assocData, $queryData, $external, $resultSet);		if ($query) {			if (!isset($resultSet) || !is_array($resultSet)) {				if (Configure::read() > 0) {					e('<div style = "font: Verdana bold 12px; color: #FF0000">SQL Error in model ' . $model->name . ': ');					if (isset($this->error) && $this->error != null) {						e($this->error);					}					e('</div>');				}				return null;			}			$count = count($resultSet);			for($i = 0; $i < $count; $i++) {				$row =& $resultSet[$i];				$q = $this->insertQueryData($query, $resultSet[$i], $association, $assocData, $model, $linkModel, $stack);				if($q != false){					$fetch = $this->fetchAll($q, $model->cacheQueries, $model->name);				} else {					$fetch = null;				}				if (!empty($fetch) && is_array($fetch)) {					if ($recursive > 0) {						foreach($linkModel->__associations as $type1) {							foreach($linkModel->{$type1} as $assoc1 => $assocData1) {								$deepModel =& $linkModel->{$assocData1['className']};								if ($deepModel->alias != $model->name) {									$tmpStack = $stack;									$tmpStack[] = $assoc1;									if ($linkModel->useDbConfig == $deepModel->useDbConfig) {										$db =& $this;									} else {										$db =& ConnectionManager::getDataSource($deepModel->useDbConfig);									}									$db->queryAssociation($linkModel, $deepModel, $type1, $assoc1, $assocData1, $queryData, true, $fetch, $recursive - 1, $tmpStack);								}							}						}					}					$this->__mergeAssociation($resultSet[$i], $fetch, $association, $type);				} else {					$tempArray[0][$association] = false;					$this->__mergeAssociation($resultSet[$i], $tempArray, $association, $type);				}			}		}	}/** * Enter description here... * * @param unknown_type $data * @param unknown_type $merge * @param unknown_type $association * @param unknown_type $type */	function __mergeAssociation(&$data, $merge, $association, $type) {		if (isset($merge[0]) && !isset($merge[0][$association])) {			$association = Inflector::pluralize($association);		}		if ($type == 'belongsTo' || $type == 'hasOne') {			if (isset($merge[$association])) {				$data[$association] = $merge[$association][0];			} else {				if (count($merge[0][$association]) > 1) {					foreach($merge[0] as $assoc => $data2) {						if ($assoc != $association) {							$merge[0][$association][$assoc] = $data2;						}					}				}				if(!isset($data[$association])) {					$data[$association] = $merge[0][$association];				} else {					if(is_array($merge[0][$association])){						$data[$association] = array_merge($merge[0][$association], $data[$association]);					}				}			}		} else {			if ($merge[0][$association] === false) {				if(!isset($data[$association])){					$data[$association] = array();				}			} else {				foreach($merge as $i => $row) {					if (count($row) == 1) {						$data[$association][] = $row[$association];					} else {						$tmp = array_merge($row[$association], $row);						unset($tmp[$association]);						$data[$association][] = $tmp;					}				}			}		}	}/** * Enter description here... * * @param unknown_type $model * @param unknown_type $linkModel * @param unknown_type $type * @param unknown_type $association * @param unknown_type $assocData * @param unknown_type $queryData * @param unknown_type $external * @param unknown_type $resultSet * @return unknown */	function generateSelfAssociationQuery(&$model, &$linkModel, $type, $association = null, $assocData = array(), &$queryData, $external = false, &$resultSet) {		$alias = $association;		if (!isset($queryData['selfJoin'])) {			$queryData['selfJoin'] = array();			$sql = 'SELECT ' . join(', ', $this->fields($model, $model->name, $queryData['fields']));			if($this->__bypass === false){				$sql .= ', ';				$sql .= join(', ', $this->fields($linkModel, $alias, ''));			}			$sql .= ' FROM ' . $this->fullTableName($model) . ' ' . $this->alias . $this->name($model->name);			$sql .= ' LEFT JOIN ' . $this->fullTableName($linkModel) . ' ' . $this->alias . $this->name($alias);			$sql .= ' ON ' . $this->name($model->name) . '.' . $this->name($assocData['foreignKey']);			$sql .= ' = ' . $this->name($alias) . '.' . $this->name($linkModel->primaryKey);			if (!in_array($sql, $queryData['selfJoin'])) {				$queryData['selfJoin'][] = $sql;				return true;			}		} elseif (isset($linkModel)) {			return $this->generateAssociationQuery($model, $linkModel, $type, $association, $assocData, $queryData, $external, $resultSet);		} else {			if (isset($this->__assocJoins)) {				$replace = ', ';				$replace .= join(', ', $this->__assocJoins['fields']);				$replace .= ' FROM';			} else {				$replace = 'FROM';			}			$sql = $queryData['selfJoin'][0];			$sql .= ' ' . join(' ', $queryData['joins']);			$sql .= $this->conditions($queryData['conditions']) . ' ' . $this->order($queryData['order']);			$sql .= ' ' . $this->limit($queryData['limit'], $queryData['offset']);			$result = preg_replace('/FROM/', $replace, $sql);			return $result;		}	}/** * Enter description here... * * @param Model $model * @param unknown_type $linkModel * @param unknown_type $type * @param unknown_type $association * @param unknown_type $assocData * @param unknown_type $queryData * @param unknown_type $external * @param unknown_type $resultSet * @return unknown */	function generateAssociationQuery(&$model, &$linkModel, $type, $association = null, $assocData = array(), &$queryData, $external = false, &$resultSet) {		$this->__scrubQueryData($queryData);		$this->__scrubQueryData($assocData);		$joinedOnSelf = false;		if ($linkModel == null) {			if (array_key_exists('selfJoin', $queryData)) {				return $this->generateSelfAssociationQuery($model, $linkModel, $type, $association, $assocData, $queryData, $external, $resultSet);			} else {				if (isset($this->__assocJoins)) {					$joinFields = ', ';					$joinFields .= join(', ', $this->__assocJoins['fields']);				} else {					$joinFields = null;				}				$sql = 'SELECT ';				if ($this->goofyLimit) {					$sql .= $this->limit($queryData['limit'], $queryData['offset']);				}				$sql .= ' ' . join(', ', $this->fields($model, $model->name, $queryData['fields'])) . $joinFields . ' FROM ';				$sql .= $this->fullTableName($model) . ' ' . $this->alias;				$sql .= $this->name($model->name) . ' ' . join(' ', $queryData['joins']) . ' ';				$sql .= $this->conditions($queryData['conditions']) . ' ' . $this->order($queryData['order']);				if (!$this->goofyLimit) {					$sql .= ' ' . $this->limit($queryData['limit'], $queryData['offset']);				}			}			return $sql;		}		$alias = $association;		if ($model->name == $linkModel->name) {			$joinedOnSelf = true;		}		if ($external && isset($assocData['finderQuery'])) {			if (!empty($assocData['finderQuery']) && $assocData['finderQuery'] != null) {				return $assocData['finderQuery'];			}		}		if (!$external && in_array($type, array('hasOne', 'belongsTo'))) {			if ($this->__bypass === false) {				$fields = join(', ', $this->fields($linkModel, $alias, $assocData['fields']));				$this->__assocJoins['fields'][] = $fields;			} else {				$this->__assocJoins = null;			}		}		$limit = '';		if (isset($assocData['limit'])) {			if (!isset($assocData['offset']) && isset($assocData['page'])) {				$assocData['offset'] = ($assocData['page'] - 1) * $assocData['limit'];			} elseif (!isset($assocData['offset'])) {				$assocData['offset'] = null;			}			$limit = $this->limit($assocData['limit'], $assocData['offset']);		}		switch($type) {			case 'hasOne':				if ($external) {					if (isset($queryData['limit']) && !empty($queryData['limit'])) {						$limit = $this->limit($queryData['limit'], $queryData['offset']);					}					$sql = 'SELECT ';					if ($this->goofyLimit) {						$sql .= $limit;					}					$sql .= ' ' . join(', ', $this->fields($linkModel, $alias, $assocData['fields']));					$sql .= ' FROM ' . $this->fullTableName($linkModel) . ' ' . $this->alias . $this->name($alias) . ' ';					$conditions = $queryData['conditions'];					$condition = $this->name($alias) . '.' . $this->name($assocData['foreignKey']);					$condition .= ' = {$__cakeForeignKey__$}';					if (is_array($conditions)) {						$conditions[] = $condition;					} else {						$cond = $this->name($alias) . '.' . $this->name($assocData['foreignKey']);						$cond .= ' = {$__cakeID__$}';						if (trim($conditions) != '') {							$conditions .= ' AND ';						}						$conditions .= $cond;					}					$sql .= $this->conditions($conditions) . $this->order($queryData['order']);					if (!$this->goofyLimit) {						$sql .= $limit;					}					return $sql;				} else {					$sql = ' LEFT JOIN ' . $this->fullTableName($linkModel);					$sql .= ' ' . $this->alias . $this->name($alias) . ' ON ';					$sql .= $this->name($alias) . '.' . $this->name($assocData['foreignKey']);					$sql .= ' = ' . $model->escapeField($model->primaryKey);					if ($assocData['order'] != null) {						$queryData['order'][] = $assocData['order'];					}					$this->__mergeConditions($queryData, $assocData);					if (!in_array($sql, $queryData['joins'])) {						$queryData['joins'][] = $sql;					}					return true;				}			break;			case 'belongsTo':				if ($external) {					$sql = 'SELECT ';					if ($this->goofyLimit) {						$sql .= $limit;					}					$sql .= ' ' . join(', ', $this->fields($linkModel, $alias, $assocData['fields']));					$sql .= ' FROM ' . $this->fullTableName($linkModel) . ' ' . $this->alias . $this->name($alias) . ' ';					$conditions = $assocData['conditions'];					$condition = $this->name($alias) . '.' . $this->name($linkModel->primaryKey);					$condition .= ' = {$__cakeForeignKey__$}';					if (is_array($conditions)) {						$conditions[] = $condition;					} else {						if (trim($conditions) != '') {							$conditions .= ' AND ';						}						$conditions .= $condition;					}					$sql .= $this->conditions($conditions) . $this->order($assocData['order']);					if (!$this->goofyLimit) {						$sql .= $limit;					}					return $sql;				} else {					$sql = ' LEFT JOIN ' . $this->fullTableName($linkModel);					$sql .= ' ' . $this->alias . $this->name($alias) . ' ON ';					$sql .= $this->name($model->name) . '.' . $this->name($assocData['foreignKey']);					$sql .= ' = ' . $this->name($alias) . '.' . $this->name($linkModel->primaryKey);					$this->__mergeConditions($queryData, $assocData);					if (!in_array($sql, $queryData['joins'])) {						$queryData['joins'][] = $sql;					}					return true;				}			break;			case 'hasMany':				$conditions = $assocData['conditions'];				$sql = 'SELECT ';				if ($this->goofyLimit) {					$sql .= $limit;				}				$sql .= ' ' . join(', ', $this->fields($linkModel, $alias, $assocData['fields']));				$sql .= ' FROM ' . $this->fullTableName($linkModel) . ' ' . $this->alias . $this->name($alias);				if (is_array($conditions)) {					$conditions[$alias . '.' . $assocData['foreignKey']] = '{$__cakeID__$}';				} else {					$cond = $this->name($alias) . '.' . $this->name($assocData['foreignKey']);					$cond .= ' = {$__cakeID__$}';					if (trim($conditions) != '') {						$conditions .= ' AND ';					}					$conditions .= $cond;				}				$sql .= $this->conditions($conditions);				$sql .= $this->order($assocData['order']);				if (!$this->goofyLimit) {					$sql .= $limit;				}				return $sql;			break;			case 'hasAndBelongsToMany':				$joinTbl = $this->fullTableName($assocData['joinTable']);				$sql = 'SELECT ';				if ($this->goofyLimit) {					$sql .= $limit;				}				$joinFields = array();				if (isset($assocData['with']) && is_array($assocData['with']) && !empty($assocData['with'])) {					$joinName = array_keys($assocData['with']);					$joinFields = $assocData['with'][$joinName[0]];					if (is_array($joinFields) && !empty($joinFields)) {						$joinFields = $this->fields($linkModel, $joinName[0], $joinFields);					} else {						$joinFields = array($this->name($joinName[0]) . '.*');					}				}				$sql .= ' ' . join(', ', am($this->fields($linkModel, $alias, $assocData['fields']), $joinFields));				$sql .= ' FROM ' . $this->fullTableName($linkModel) . ' ' . $this->alias . $this->name($alias);				$sql .= ' JOIN ' . $joinTbl;				$joinAssoc = $joinTbl;				if (isset($assocData['with']) && is_array($assocData['with']) && !empty($assocData['with'])) {					$joinAssoc = $joinName[0];					$sql .= $this->alias . $this->name($joinAssoc);				}				$sql .= ' ON ' . $this->name($joinAssoc);				$sql .= '.' . $this->name($assocData['foreignKey']) . ' = {$__cakeID__$}';				$sql .= ' AND ' . $this->name($joinAssoc) . '.' . $this->name($assocData['associationForeignKey']);				$sql .= ' = ' . $this->name($alias) . '.' . $this->name($linkModel->primaryKey);				$sql .= $this->conditions($assocData['conditions']);				$sql .= $this->order($assocData['order']);				if (!$this->goofyLimit) {					$sql .= $limit;				}				return $sql;			break;		}		return null;	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -