给出以下示例:(来自Zend Quick Start Tutorial btw)
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
非常感谢
答案 0 :(得分:2)
可能id
是一个自动增量字段。 unset
用于确保INSERT语句不会使用随机ID,而是使用null
。
答案 1 :(得分:2)
代码似乎暗示始终设置$data['id']
,但它可能具有空值(''
或'0'
)。 unset
用于防止INSERT
SQL查询尝试插入具有固定标识0
的每个新记录(或者为了防止查询因无效的SQL语法而中断,可以在这种情况下,不要只告诉这些信息。
更新再次阅读后,显然数组$data
根本无法设置id
成员(没有)可能设置的代码)。因此,该行完全是冗余的,就像现在编写代码一样。它可能是以前版本代码的遗留物。