Zend_DBTable 关系
Posted
技术标签:
【中文标题】Zend_DBTable 关系【英文标题】:Zend_DBTable relationships 【发布时间】:2011-03-10 15:51:21 【问题描述】:我知道这个问题肯定被问了好几次,但我找不到(可以理解的)答案。
我要表 'spots' & 'members' 和一个关系表 'spotmembers'。
在 zend 框架中,我使用 Zend_Db_Table 但我无法从请求中的关系中检索对象。
这是我的课程:
class Model_DbTable_Member extends Zend_Db_Table
protected $_name = 'members';
protected $_primary = 'id';
protected $_dependentTables = array('Model_DbTable_SpotMember');
class Model_DbTable_SpotMember extends Zend_Db_Table
protected $_name = 'spotmembers';
protected $_primary = 'id';
protected $_referenceMap = array(
'Spot' => array(
'columns' => 'id_spot',
'refTableClass' => 'Model_DbTable_Spot',
'refColumns' => 'id'
),
'Member' => array(
'columns' => 'id_member',
'refTableClass' => 'Model_DbTable_Member',
'refColumns' => 'id'
)
);
我想发出请求以检索与 Spot 对象相关的成员对象,您知道如何执行此操作吗?
问候。
【问题讨论】:
【参考方案1】:你可以试试这个简单的关系OneToMany:
$Spot = new Model_DbTable_SpotMember();
$SpotDB = $Spot->find($id)->current();
$Members = $SpotDB->findParentModel_DbTable_Member();
Zend_Debug::dump($Members->toArray();
对于关系 ManyToMany,有人会这样认为:
$Members = $Spot->findModel_DbTable_MemberViaModel_DbTable_SpotMember('MemberName','MemberInfo');
Zend_Debug::dump($Members->toArray();
所有文档,可以在这里找到:http://framework.zend.com/manual/en/zend.db.table.relationships.html
示例 #9:
$bugsTable = new Bugs(); // Your "Spot"
$bugsRowset = $bugsTable->find(1234); // Loading "Spot" and retreive RowSet
$bug1234 = $bugsRowset->current(); // Retrieve
$productsRowset = $bug1234->findManyToManyRowset('Products', // Your "Members" table
'BugsProducts', // YOur "relation" table
'Bug'); // The crurent table "Spot"
【讨论】:
致命错误:调用未定义的方法 Model_DbTable_SpotMember::findParentModel_DbTable_Member() ...我在尝试使用 zend 魔法函数时已经发现了这个错误。有什么想法吗? 对不起,我的错...查看编辑的源并使用find()->current()
返回的$SpotDB
它有效!如果我想让所有成员相关怎么办?导致此 current() 仅捕获行集的第一行。谢谢
通常情况下,$Members
中的所有“成员”...我会在回答中提供更多信息。
再次:致命错误:调用未定义的方法Model_DbTable_SpotMember::findModel_DbTable_MemberViaModel_DbTable_SpotMember(),我真的不习惯这种关系管理......有什么想法吗?以上是关于Zend_DBTable 关系的主要内容,如果未能解决你的问题,请参考以下文章