我有三个表,incidents
,incident_properties
和property_types
。
我想做的是:
incidents
表格中的一行property_type
表所以我建立了这个表关系 -
class Incidents extends Zend_Db_Table_Abstract
{
protected $_name = 'incidents';
protected $_dependentTables = 'Properties';
}
class IncidentProperties extends Zend_Db_Table_Abstract
{
protected $_name = 'incident_properties';
protected $_dependentTables = 'PropertyTypes';
protected $_referenceMap = array(
'Incidents' => array(
'refTableClass' => 'Incidents',
'refColumns' => 'incident_id'
)
);
}
class PropertyTypes extends Zend_Db_Table_Abstract
{
protected $_name = 'incident_property_types';
protected $_referenceMap = array(
'Properties' => array(
'refTableClass' => 'IncidentProperties',
'refColumns' => 'property_type_id'
)
);
}
在我的incidents
模型映射器中,我想做类似的事情:
$select = $this->_dbTable->select()->where('id = ?',$incident->get_id());
$incident_properties = $this->_dbTable
->fetchRow($select)
->findDependentRows('IncidentsProperties')
->toArray();
print_r($incident_properties);
并在$incident_properties
中检索其类型行中的属性键,值和类型。
任何想法如何以正确的方式实现这一目标?
答案 0 :(得分:0)
好吧,我们走吧。
1:您始终必须在$ _dependentTables中添加完整的类名。因此,您不要添加数据库中的表名,而是添加Zend_Db_Table_Abstract实例的类名。
所以它应该是:
class Incidents extends Zend_Db_Table_Abstract
{
protected $_name = 'incidents';
protected $_dependentTables = 'IncidentProperties';
}
2:你应该在referenceMap中添加一个columns属性,如下所示:
protected $_referenceMap = array(
'Incidents' => array(
'refTableClass' => 'Incidents',
'refColumns' => 'incident_id',
'columns' => 'name of the column that references the incident_id'
)
);
好的,你想要做的是:
class IncidentMapper
{
protected $_dbAdapter; //an instance of your Incident-Class extending Zend_Db_Table_Abstract
public function doSomeStuff($incidentID)
{
$incident = $this->_dbAdapter->find($incidentID);
//fetch dependent rowsets using incident_id
$incidentProperties = $result->findDependentRowset('IncidentProperties', 'Incidents');
foreach($incidentProperties as $incidentProperty)
{
//fetch parent row using property_type_id
$propertyType = $incidentProperty->findParentRow('PropertyTypes', 'Properties');
}
}
}
然后,如果您想将适配器用作数据阵列,则必须调用
->toArray()
结果。
首先,您将通过
收到您的Incidences-Class实例 ->find($incidentID)
然后你打电话
->findDependentRowset('ReferencedClass', 'Rule')
获取所有具有获取事件ID的IncidentProperties。 然后循环浏览所有找到的属性并调用
->findParentRow('ReferencedClass', 'Rule')
获取PropertyType。
我希望它有所帮助。如果您需要更多信息,请查看ReferenceGuide - Zend_Db_Table
起初有点难以理解和混淆。如果您有任何其他问题,请随时提出。
编辑:
目前我不太确定您是否将属性作为适配器或数据阵列接收。 (不幸的是我现在无法测试它) 因此,如果遇到问题,您可能需要按如下方式获取每个IncidentProperty:
$_incidentPropertyAdapter->find($incident_property_id)
之前你可以打电话
->findParentRow(...)