为什么我们需要在这里设置


Why do we need the unset here?

给定以下示例:(来自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