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 关系的主要内容,如果未能解决你的问题,请参考以下文章

集合论:关系

血缘关系是啥?

举例说明啥是组合关系啥是聚合关系

DBMS-形式化关系查询语言:关系代数元组关系演算域关系演算

类之间的依赖关系和组合关系

关系数据库系统