【发布时间】:2011-06-14 04:01:24
【问题描述】:
如何使用数据映射器的关系?快速入门中的示例缺少一些信息,如果我正在使用关系数据,我将如何使用数据映射器。例如
(表)用户 (表)文章 (表)标签
用户 -one_to_many- 文章 -many_to_many- 标签
如果我通过数据映射器获取一位用户,那么获取相关文章和标签的最佳方式是什么?它们也应该在模型中定义吗?有什么例子或最佳实践吗?
【问题讨论】:
如何使用数据映射器的关系?快速入门中的示例缺少一些信息,如果我正在使用关系数据,我将如何使用数据映射器。例如
(表)用户 (表)文章 (表)标签
用户 -one_to_many- 文章 -many_to_many- 标签
如果我通过数据映射器获取一位用户,那么获取相关文章和标签的最佳方式是什么?它们也应该在模型中定义吗?有什么例子或最佳实践吗?
【问题讨论】:
如果您对这些“文章”、“用户”和“标签”中的每一个都有一个类,那么您当然可以为您的类添加额外的方法。例如,您可能有:
class Article {
public function getTags() {
// Talk to your DAO object or table data gateway or whatever
// and instantiate them and return an array of Tag objects
}
}
class User {
public function getArticles() { }
}
或者您可以在静态网关类中实现它们,例如:
class Article_Gateway {
public static function fetchByTag( $tagName ) { }
public static function fetchByUser( $userName ) { }
}
至于如何让数据行在你的模型中使用,你可以使用 Zend_Db_Table 的关系特性来做到这一点(http://framework.zend.com/manual/en/zend.db.table.relationships.html)
例如:
$accountsTable = new Accounts();
$accountsRowset = $accountsTable->find(1234);
$user1234 = $accountsRowset->current();
$bugsReportedByUser = $user1234->findDependentRowset('Bugs');
【讨论】: