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)
谢谢你
我设计并编写了Zend Framework中的表关系功能.
你的问题的答案是否定的,该findManyToManyRowset()
方法只从相关表中获取行,它不会将它们合并到相应的Row对象中.原因是ZF中的Row对象save()
本身可以返回到数据库,如果添加字段,它将不知道如何处理它们.
因此,您应该实现一个自定义Row对象来保存用户字段和用户属性集合 - 将用户属性存储为Rowset对象.
然后进行扩展__get()
,__set()
以便在读取或写入对象属性时知道如何将字段映射到正确的数组中.也就是说,如果尝试读取或写入不属于用户行的字段,则会回退到用户属性Rowset.
还扩展save()
为不仅保存当前行,还调用save()
用户属性的Rowset.