Zend Dd Rowset获得父行

时间:2010-03-31 07:18:01

标签: php zend-framework

我想知道在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的抽象来做吗?

1 个答案:

答案 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会将其全部组合在一起。

另见相关问题: