我想知道在Zend Db RowSet中使用抽象而不是连接,是否可能 例如,我可以从父表中获取一些信息,如此处
/**
* Get default photo info (path , description)
*/
public function getDefaultPhotoInfo($userdId){
$select = $this->select($this)
->where('id=?', $userdId);
$rowset = $this->fetchAll($select);
$current = $rowset->current();
$res = $current->findParentRow('UserPhotos', 'Avatar');
if(isset($res)){
return $res->toArray();
}
}
如何使用Rowset抽象来实现此逻辑
table( id, pic_path,) table_translation(id, table_id, lang_id, pic_title);
上面是两个表的表示,想法是从两个表中获取指定lang_id的信息,使用连接很容易,但是我可以用Db Rowset的抽象来做吗?
答案 0 :(得分:1)
只是为了澄清:在fetchAll
实例上执行Zend_Db_Table
时,会得到一个Zend_Db_Table_Rowset
,它实现了Iterator
接口。因此,在Rowset实例上调用current()
将返回Zend_Db_Table_Row
实例。
从ZF1.10开始,您可以在Zend_Db_Table_Defintion实例中或在reference guide for Zend_Db_Table
Relationships中描述的具体表实例上定义表之间的关系。由于指南相当详细,我不会在这里重现。
一旦定义了关系,就可以使用从一行获取它们(示例1来自指南)
$accountsTable = new Accounts();
$accountsRowset = $accountsTable->find(1234);
$user1234 = $accountsRowset->current();
$bugsReportedByUser = $user1234->findDependentRowset('Bugs');
或通过魔术探测器方法。
findParentRow()
方法与此有些不同,因为它从其父行返回从属行集的完整行。
Ex5:此示例显示从表Bugs中获取Row对象(例如,其中一个状态为“NEW”的错误),并在Accounts表中找到报告错误的用户的行。
$bugsTable = new Bugs();
$bugsRowset = $bugsTable->fetchAll(array('bug_status = ?' => 'NEW'));
$bug1 = $bugsRowset->current();
$reporter = $bug1->findParentRow('Accounts');
使用表关系时,请记住这些会导致每个获取的从属表有一个额外的查询,而Join会将其全部组合在一起。
另见相关问题: