3

我想从 3 个表中检索所有数据

用户、属性和 users_properties。

所以我决定使用 manytomanyRowset。但令我惊讶的是,我从 properties 和 users_properties 表中获取数据,但从 users 表中没有数据。这是为什么?我需要用户表中的一些列有没有办法告诉 manytomanyrowset 函数我也需要当前表中的数据?

这是我的功能

public function fetchRegisteredProperties()
{

    $userTable = $this->getTable();
    require_once APPLICATION_PATH . '/models/DbTable/UsersPropertiesDB.php';
    require_once APPLICATION_PATH . '/models/DbTable/PropertiesDB.php';

    $propertiesRowset = $table->fetchAll();
    $allProperties = array();

    foreach ($propertiesRowset as $row) {
        $propertiesRowset = $row->findManyToManyRowset(
          'Model_DbTable_Properties','Model_DbTable_UsersProperties');
        $allProperties = array_merge($tempArray,$propertiesRowset->toArray()); 
    }

    return $allProperties;
}

提前感谢

4

1 回答 1

7

我在 Zend Framework 中设计并编码了表关系特性。

您的问题的答案是否定的,该findManyToManyRowset()方法仅从相关表中获取行,它不会将它们合并到相应的 Row 对象中。原因是 ZF 中的 Row 对象可以save()自己返回数据库,如果添加字段,它将不知道如何处理它们。

因此,您应该实现一个自定义 Row 对象来保存用户字段和用户属性的集合——将用户属性存储为 Rowset 对象。

然后进行扩展__get()__set()以便在您读取或写入对象属性时知道如何将字段映射到正确的数组中。也就是说,如果尝试读取或写入不属于用户行的字段,它将回退到用户属性行集。

还扩展save()以不仅保存当前行,还调用save()用户属性的行集。

于 2009-06-24T18:43:07.893 回答