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

📄 abstract.php

📁 Bug tracker, and reporter.
💻 PHP
📖 第 1 页 / 共 3 页
字号:
		/**         * INSERT the new row.         */		$tableSpec = ($this->_schema ? $this->_schema . '.' : '') . $this->_name;		$this->_db->insert($tableSpec, $data);		/**         * Fetch the most recent ID generated by an auto-increment         * or IDENTITY column, unless the user has specified a value,         * overriding the auto-increment mechanism.         */		if ($this->_sequence === true && !isset($data[$pkIdentity])) {			$data[$pkIdentity] = $this->_db->lastInsertId();		}		/**         * Return the primary key value if the PK is a single column,         * else return an associative array of the PK column/value pairs.         */		$pkData = array_intersect_key($data, array_flip($primary));		if (count($primary) == 1) {			reset($pkData);			return current($pkData);		}		return $pkData;	}	/**     * Updates existing rows.     *     * @param  array        $data  Column-value pairs.     * @param  array|string $where An SQL WHERE clause, or an array of SQL WHERE clauses.     * @return int          The number of rows updated.     */	public function update(array $data, $where)	{		$tableSpec = ($this->_schema ? $this->_schema . '.' : '') . $this->_name;		return $this->_db->update($tableSpec, $data, $where);	}	/**     * Called by a row object for the parent table's class during save() method.     *     * @param  string $parentTableClassname     * @param  array  $oldPrimaryKey     * @param  array  $newPrimaryKey     * @return int     */	public function _cascadeUpdate($parentTableClassname, array $oldPrimaryKey, array $newPrimaryKey)	{		$rowsAffected = 0;		foreach ($this->_getReferenceMapNormalized() as $map) {			if ($map[self::REF_TABLE_CLASS] == $parentTableClassname && isset($map[self::ON_UPDATE])) {				switch ($map[self::ON_UPDATE]) {					case self::CASCADE:						$newRefs = array();						for ($i = 0; $i < count($map[self::COLUMNS]); ++$i) {							$col = $this->_db->foldCase($map[self::COLUMNS][$i]);							$refCol = $this->_db->foldCase($map[self::REF_COLUMNS][$i]);							if (array_key_exists($refCol, $newPrimaryKey)) {								$newRefs[$col] = $newPrimaryKey[$refCol];							}							$type = $this->_metadata[$col]['DATA_TYPE'];							$where[] = $this->_db->quoteInto(							$this->_db->quoteIdentifier($col, true) . ' = ?',							$oldPrimaryKey[$refCol], $type);						}						$rowsAffected += $this->update($newRefs, $where);						break;					default:						// no action						break;				}			}		}		return $rowsAffected;	}	/**     * Deletes existing rows.     *     * @param  array|string $where SQL WHERE clause(s).     * @return int          The number of rows deleted.     */	public function delete($where)	{		$tableSpec = ($this->_schema ? $this->_schema . '.' : '') . $this->_name;		return $this->_db->delete($tableSpec, $where);	}	/**     * Called by parent table's class during delete() method.     *     * @param  string $parentTableClassname     * @param  array  $primaryKey     * @return int    Number of affected rows     */	public function _cascadeDelete($parentTableClassname, array $primaryKey)	{		$rowsAffected = 0;		foreach ($this->_getReferenceMapNormalized() as $map) {			if ($map[self::REF_TABLE_CLASS] == $parentTableClassname && isset($map[self::ON_DELETE])) {				switch ($map[self::ON_DELETE]) {					case self::CASCADE:						for ($i = 0; $i < count($map[self::COLUMNS]); ++$i) {							$col = $this->_db->foldCase($map[self::COLUMNS][$i]);							$refCol = $this->_db->foldCase($map[self::REF_COLUMNS][$i]);							$type = $this->_metadata[$col]['DATA_TYPE'];							$where[] = $this->_db->quoteInto(							$this->_db->quoteIdentifier($col, true) . ' = ?',							$primaryKey[$refCol], $type);						}						$rowsAffected += $this->delete($where);						break;					default:						// no action						break;				}			}		}		return $rowsAffected;	}	/**     * Fetches rows by primary key.  The argument specifies one or more primary     * key value(s).  To find multiple rows by primary key, the argument must     * be an array.     *     * This method accepts a variable number of arguments.  If the table has a     * multi-column primary key, the number of arguments must be the same as     * the number of columns in the primary key.  To find multiple rows in a     * table with a multi-column primary key, each argument must be an array     * with the same number of elements.     *     * The find() method always returns a Rowset object, even if only one row     * was found.     *     * @param  mixed $key The value(s) of the primary keys.     * @return Zend_Db_Table_Rowset_Abstract Row(s) matching the criteria.     * @throws Zend_Db_Table_Exception     */	public function find()	{		$args = func_get_args();		$keyNames = array_values((array) $this->_primary);		if (count($args) < count($keyNames)) {			require_once 'Zend/Db/Table/Exception.php';			throw new Zend_Db_Table_Exception("Too few columns for the primary key");		}		if (count($args) > count($keyNames)) {			require_once 'Zend/Db/Table/Exception.php';			throw new Zend_Db_Table_Exception("Too many columns for the primary key");		}		$whereList = array();		$numberTerms = 0;		foreach ($args as $keyPosition => $keyValues) {			// Coerce the values to an array.			// Don't simply typecast to array, because the values			// might be Zend_Db_Expr objects.			if (!is_array($keyValues)) {				$keyValues = array($keyValues);			}			if ($numberTerms == 0) {				$numberTerms = count($keyValues);			} else if (count($keyValues) != $numberTerms) {				require_once 'Zend/Db/Table/Exception.php';				throw new Zend_Db_Table_Exception("Missing value(s) for the primary key");			}			for ($i = 0; $i < count($keyValues); ++$i) {				$whereList[$i][$keyPosition] = $keyValues[$i];			}		}		$whereClause = null;		if (count($whereList)) {			$whereOrTerms = array();			foreach ($whereList as $keyValueSets) {				$whereAndTerms = array();				foreach ($keyValueSets as $keyPosition => $keyValue) {					$type = $this->_metadata[$keyNames[$keyPosition]]['DATA_TYPE'];					$whereAndTerms[] = $this->_db->quoteInto(					$this->_db->quoteIdentifier($keyNames[$keyPosition], true) . ' = ?',					$keyValue, $type);				}				$whereOrTerms[] = '(' . implode(' AND ', $whereAndTerms) . ')';			}			$whereClause = '(' . implode(' OR ', $whereOrTerms) . ')';		}		return $this->fetchAll($whereClause);	}	/**     * Fetches all rows.     *     * Honors the Zend_Db_Adapter fetch mode.     *     * @param string|array|Zend_Db_Table_Select $where  OPTIONAL An SQL WHERE clause or Zend_Db_Table_Select object.     * @param string|array                      $order  OPTIONAL An SQL ORDER clause.     * @param int                               $count  OPTIONAL An SQL LIMIT count.     * @param int                               $offset OPTIONAL An SQL LIMIT offset.     * @return Zend_Db_Table_Rowset_Abstract The row results per the Zend_Db_Adapter fetch mode.     */	public function fetchAll($where = null, $order = null, $count = null, $offset = null)	{		if (!($where instanceof Zend_Db_Table_Select)) {			$select = $this->select();			if ($where !== null) {				$this->_where($select, $where);			}			if ($order !== null) {				$this->_order($select, $order);			}			if ($count !== null || $offset !== null) {				$select->limit($count, $offset);			}		} else {			$select = $where;		}		$rows = $this->_fetch($select);		$data  = array(		'table'    => $this,		'data'     => $rows,		'readOnly' => $select->isReadOnly(),		'rowClass' => $this->_rowClass,		'stored'   => true		);		@Zend_Loader::loadClass($this->_rowsetClass);		return new $this->_rowsetClass($data);	}	/**     * Fetches one row in an object of type Zend_Db_Table_Row_Abstract,     * or returns Boolean false if no row matches the specified criteria.     *     * @param string|array|Zend_Db_Table_Select $where  OPTIONAL An SQL WHERE clause or Zend_Db_Table_Select object.     * @param string|array                      $order  OPTIONAL An SQL ORDER clause.     * @return Zend_Db_Table_Row_Abstract The row results per the     *     Zend_Db_Adapter fetch mode, or null if no row found.     */	public function fetchRow($where = null, $order = null)	{		if (!($where instanceof Zend_Db_Table_Select)) {			$select = $this->select();			if ($where !== null) {				$this->_where($select, $where);			}			if ($order !== null) {				$this->_order($select, $order);			}			$select->limit(1);		} else {			$select = $where->limit(1);		}		$rows = $this->_fetch($select);		if (count($rows) == 0) {			return null;		}		$data = array(		'table'   => $this,		'data'     => $rows[0],		'readOnly' => $select->isReadOnly(),		'stored'  => true		);		@Zend_Loader::loadClass($this->_rowClass);		return new $this->_rowClass($data);	}	/**     * Fetches a new blank row (not from the database).     *     * @return Zend_Db_Table_Row_Abstract     * @deprecated since 0.9.3 - use createRow() instead.     */	public function fetchNew()	{		return $this->createRow();	}	/**     * Fetches a new blank row (not from the database).     *     * @param  array $data OPTIONAL data to populate in the new row.     * @return Zend_Db_Table_Row_Abstract     */	public function createRow(array $data = array())	{		$defaults = array_combine($this->_cols, array_fill(0, count($this->_cols), null));		$data = array_intersect_key($data, $defaults);		$config = array(		'table'    => $this,		'data'     => $defaults,		'readOnly' => false,		'stored'   => false		);		@Zend_Loader::loadClass($this->_rowClass);		$row = new $this->_rowClass($config);		$row->setFromArray($data);		return $row;	}	/**     * Generate WHERE clause from user-supplied string or array     *     * @param  string|array $where  OPTIONAL An SQL WHERE clause.     * @return Zend_Db_Table_Select     */	protected function _where(Zend_Db_Table_Select $select, $where)	{		$where = (array) $where;		foreach ($where as $key => $val) {			// is $key an int?			if (is_int($key)) {				// $val is the full condition				$select->where($val);			} else {				// $key is the condition with placeholder,				// and $val is quoted into the condition				$select->where($key, $val);			}		}		return $select;	}	/**     * Generate ORDER clause from user-supplied string or array     *     * @param  string|array $order  OPTIONAL An SQL ORDER clause.     * @return Zend_Db_Table_Select     */	protected function _order(Zend_Db_Table_Select $select, $order)	{		if (!is_array($order)) {			$order = array($order);		}		foreach ($order as $val) {			$select->order($val);		}		return $select;	}	/**     * Support method for fetching rows.     *     * @param  Zend_Db_Table_Select $select  query options.     * @return array An array containing the row results in FETCH_ASSOC mode.     */	protected function _fetch(Zend_Db_Table_Select $select)	{		$stmt = $this->_db->query($select);		$data = $stmt->fetchAll(Zend_Db::FETCH_ASSOC);		return $data;	}	public function numRows($where = null)	{		$select = $this->_db->select();		$select->from($this->_name, "COUNT(*)", $this->_schema);		// the WHERE clause		$where = (array) $where;		foreach ($where as $key => $val) {			// is $key an int?			if (is_int($key)) {				// $val is the full condition				$select->where($val);			} else {				// $key is the condition with placeholder,				// and $val is quoted into the condition				$select->where($key, $val);			}		}		// return the results		$stmt = $this->_db->query($select);		$data = $stmt->fetchColumn(0);		return $data;	}}

⌨️ 快捷键说明

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