给定以下示例:(来自Zend快速入门教程顺便说一句)
public function save(Application_Model_Guestbook $guestbook)
{
$data = array(
'email' => $guestbook->getEmail(),
'comment' => $guestbook->getComment(),
'created' => date('Y-m-d H:i:s'),
);
if (null === ($id = $guestbook->getId())) {
unset($data['id']);
$this->getDbTable()->insert($data);
} else {
$this->getDbTable()->update($data, array('id = ?' => $id));
}
}
为什么我们需要那里的未设置?我的意思是,如果我们之前没有声明过,为什么我们需要销毁特定的数组键?更奇怪的是,我们到底在哪里宣布呢?
我们可以看看getDbTable方法,但即使看了看,我也找不到答案:
public function getDbTable()
{
if (null === $this->_dbTable) {
$this->setDbTable('Application_Model_DbTable_Guestbook');
}
return $this->_dbTable;
}
如果我们研究一下setDbTable方法,任何地方都没有$data。
public function setDbTable($dbTable)
{
if (is_string($dbTable)) {
$dbTable = new $dbTable();
}
if (!$dbTable instanceof Zend_Db_Table_Abstract) {
throw new Exception('Invalid table data gateway provided');
}
$this->_dbTable = $dbTable;
return $this;
}
我知道 Zend Framework 会自动在这里找到我们表的 id:
class Application_Model_DbTable_Guestbook extends Zend_Db_Table_Abstract
{
/** Table name */
protected $_name = 'guestbook';
}
但我不明白这是否以某种方式相关...
我相信我已经把所有相关信息都放了。不过,如果没有什么相关的,也许我在这里错过了一些东西:(来源)http://framework.zend.com/manual/en/learning.quickstart.create-model.html
多谢
代码似乎暗示$data['id']
始终被设置,但它可能有一个空值(''
或'0'
)。在这种情况下,unset
是为了防止INSERT
SQL 查询尝试插入固定 id 为 0
的每个新记录(或防止查询因无效的 SQL 语法而中断,无法仅使用此信息判断)。
更新:再次阅读后,很明显数组$data
根本无法设置其id
成员(没有代码可以设置它)。因此,该行对于现在编写代码的方式是完全多余的。它可能是以前版本的代码的剩余部分。
可能id
是一个自动增量字段。该unset
用于确保 INSERT 语句不会使用随机 id,而是null
。