zend framework的插入时,使用数组的问题
发布网友
发布时间:2022-11-23 16:59
我来回答
共1个回答
热心网友
时间:2024-11-15 13:57
/**
* Inserts a new row.
*
* @param array $data Column-value pairs.
* @return mixed The primary key of the row inserted.
*/
public function insert(array $data)
{
$this->_setupPrimaryKey();
/**
* Zend_Db_Table assumes that if you have a compound primary key
* and one of the columns in the key uses a sequence,
* it's the _first_ column in the compound key.
*/
$primary = (array) $this->_primary;
$pkIdentity = $primary[(int)$this->_identity];
/**
* If this table uses a database sequence object and the data does not
* specify a value, then get the next ID from the sequence and add it
* to the row. We assume that only the first column in a compound
* primary key takes a value from a sequence.
*/
if (is_string($this->_sequence) && !isset($data[$pkIdentity])) {
$data[$pkIdentity] = $this->_db->nextSequenceId($this->_sequence);
$pkSuppliedBySequence = true;
}
/**
* If the primary key can be generated automatically, and no value was
* specified in the user-supplied data, then omit it from the tuple.
*
* Note: this checks for sensible values in the supplied primary key
* position of the data. The following values are considered empty:
* null, false, true, '', array()
*/
if (!isset($pkSuppliedBySequence) && array_key_exists($pkIdentity, $data)) {
if ($data[$pkIdentity] === null // null
|| $data[$pkIdentity] === '' // empty string
|| is_bool($data[$pkIdentity]) // boolean
|| (is_array($data[$pkIdentity]) && empty($data[$pkIdentity]))) { // empty array
unset($data[$pkIdentity]);
}
}
/**
* 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;
}追问我貌似没看到将$data 转换的函数呀~~~~
$data = array(
'noble_title' => 'King',
'first_name' => 'Arthur',
)
转换成 'noble_title="king" and first_name="Arthur"';
追答if (!isset($pkSuppliedBySequence) && array_key_exists($pkIdentity, $data)) {
if ($data[$pkIdentity] === null // null
|| $data[$pkIdentity] === '' // empty string
|| is_bool($data[$pkIdentity]) // boolean
|| (is_array($data[$pkIdentity]) && empty($data[$pkIdentity]))) { // empty array
unset($data[$pkIdentity]);
}
}