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

时间:2011-05-08 11:53:10

标签: php zend-framework

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

非常感谢

2 个答案:

答案 0 :(得分:2)

可能id是一个自动增量字段。 unset用于确保INSERT语句不会使用随机ID,而是使用null

答案 1 :(得分:2)

代码似乎暗示始终设置$data['id'],但它可能具有空值('''0')。 unset用于防止INSERT SQL查询尝试插入具有固定标识0的每个新记录(或者为了防止查询因无效的SQL语法而中断,可以在这种情况下,不要只告诉这些信息。

更新再次阅读后,显然数组$data 根本无法设置id成员(没有)可能设置的代码)。因此,该行完全是冗余的,就像现在编写代码一样。它可能是以前版本代码的遗留物。