多种多样的关系

3 database many-to-many zend-framework

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

用户,属性和users_properties.

所以我决定使用manytomanyRowset.但令我惊讶的是,我从属性和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;
}
Run Code Online (Sandbox Code Playgroud)

谢谢你

Bil*_*win 6

我设计并编写了Zend Framework中的表关系功能.

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

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

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

还扩展save()为不仅保存当前行,还调用save()用户属性的Rowset.