【问题标题】:Zend Many to Many RelationshipZend 多对多关系
【发布时间】:2009-06-25 02:43:07
【问题描述】:

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

用户、属性和用户属性。

所以我决定使用 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;
}

提前感谢

【问题讨论】:

    标签: database zend-framework many-to-many


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 哦,好吧,很酷是有道理的。我是 zend 框架的新手,我已经习惯了 cakePhp 处理事情的方式。感谢您的快速回复!
    猜你喜欢
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 2014-10-11
    相关资源
    最近更新 更多