加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

zend-framework – Zend_Db_Table_Row:为什么我必须使用createR

发布时间:2020-12-13 17:09:17 所属栏目:PHP教程 来源:网络整理
导读:我想知道为什么在Zend_Db中你必须使用createRow方法来获取一个新的空Row对象,而不是直接实例化Row对象. 例如,如果我已经扩展了默认类来创建自己的User表和行类,那么为了创建一个新的行对象,我总是必须执行以下操作来创建一个新的Row对象: $userTable = new
我想知道为什么在Zend_Db中你必须使用createRow方法来获取一个新的空Row对象,而不是直接实例化Row对象.

例如,如果我已经扩展了默认类来创建自己的User表和行类,那么为了创建一个新的行对象,我总是必须执行以下操作来创建一个新的Row对象:

$userTable = new App_Table_User();
$userRow = $userTable->createRow();
$userRow->setName('bob');
$userRow->save();

但对我来说,能够说出来更有意义:

$userRow = new App_Row_User();
$userRow->setName('bob');
$userRow->save();

我知道我总是可以在扩展Zend_Db_Table_Row_Abstract的Row类中构建这个功能,但我想知道是否有一个特定的原因,Zend Framework团队不只是将它作为默认值?

解决方法

您可以使用new直接实例化Row类.

但Row对象需要知道哪些列对该行数据有效.

将行的类名映射到其对应的表类名是没有魔力的.因此Row本身并不知道它属于哪个表.因此它无法猜测如何编写SQL来执行插入或更新操作;它从相应的Zend_Db_Table对象获取此元数据.您必须告诉Row要使用哪个表.

如果使用new构造行对象,则必须将配置数组传递给构造函数,包括表类名,或者该表类的对象实例.

$userRow = new App_Row_User( array('table' => 'App_Table_User') );

要么

$userTable = new App_Table_User();
$userRow = new App_Row_User( array('table' => $userTable) );

如果没有有效的表对象或类名,使用new实例化Row对象将引发异常.

同样,save()使用表对象,调用方法insert()或update().如果没有有效的表对象,Row的save()方法将抛出异常.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读