我有一个现有的MSSQL表,它的主键类型为uniqueidentifier
,默认值为NEWID()
。
我似乎无法获得Zend框架的(1.1.11)Zend_Db_Table_Row
对象通过save()
在此表中正确创建新行,它给出了错误'Cannot refresh row as parent is missing'
(尽管行实际上是正确插入的)。
查看Zend_Db_Table_Row_Abstract
,错误来自_refresh()
函数并抛出异常,因为它无法取回插入的行。_refresh()
函数中的$where
值显示主键值为''
,因此不能匹配新行。
是否有一些问题Zend弄清楚主键的值是插入后,如果它的uniqueidentifier
列?
我目前的解决方案是简单地运行一个单独的查询来生成一个uniqueidentifier
,并在保存它之前将其分配给主键字段,例如
public function getNewId()
{
$result = $this->getAdapter()->query('SELECT NEWID()')->fetch();
return $result['computed'];
}
然后赋值并保存:
$row = $tblWhatever->createrow($data);
$row->primaryKeyName = $tblWhatever->getNewId();
$row->save();
它不像让Zend从列的默认值条目中拾取PK生成的值那样干净,但它保存而不会抛出异常。