Zend 多对多关系

问题描述 投票:0回答:1

我想检索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;
}

提前致谢

php database zend-framework many-to-many
1个回答
7
投票

我在 Zend Framework 中设计并编码了表关系功能。

你的问题的答案是否定的,

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

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

然后扩展

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

还扩展

save()
不仅可以保存当前行,还可以在用户属性的 Rowset 上调用
save()

© www.soinside.com 2019 - 2024. All rights reserved.