新的Zend_Db_Table_Row基于MSSQL表与一个PK唯一标识符-不能刷新行父丢失



我有一个现有的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生成的值那样干净,但它保存而不会抛出异常。

最新更新