Zend Framework 1.12:Zend Table的_setupPrimaryKey方法

时间:2015-12-07 21:08:28

标签: php zend-framework

我正在修复与Zend_Db_Table模型相关的错误。我遇到的问题是,在调用insert,update等之后,Zend_Db_Table祖先的$ _primary属性会被神秘地改变。

我想说我在这个领域有以下价值:

Class Model_Book extends App_Base_FileForAcs implements App_Interface_OnixDataSource, App_Interface_ApiDataSource, App_Interface_DbGateway
{
protected $_name = 'book';
protected $_primary = 'book_id';
...
}

如果我在插入操作后检查$ _primary它将包含:

array(1) {
[1]=>
string(7) "book_id"
}

此转换发生在Zend_Db_Table_Abstract类的_setupPrimaryKey方法中。你能解释为什么这个字段应该转换为数组,为什么数组以0索引开始?

1 个答案:

答案 0 :(得分:0)

ZF在内部使用数组来定义主键,以便管理复合键。它在这里描述:

http://framework.zend.com/manual/1.12/en/zend.db.table.html#zend.db.table.defining.primary-key

_setupPrimaryKey中的代码将您的字符串转换为索引为1的数组,或者如果它已经是数组,则执行array_unshift($this->_primary, null),然后取消设置_primary [0]以使其基于1

要获取主键(始终作为数组),您可以在此处找到更多信息:Get Primary Key out of Zend_Db_Table_Rowset Object - 包括如何从表对象中获取它。

因此,简而言之 - 主键始终是一个数组,但为方便起见,ZF允许您将其定义为字符串。你从来没有描述过你的bug,但是如果你依赖主键是一个字符串,直接读取$ _primary,你应该重构一下,使用$objZenDbTable->info('primary')来获取密钥,完全期待一个数组。