尝试使用Zend_Db_Tables任务是从2个表中检索数据,或者可能是3个表,然后以json的形式返回。
代码:
public function getWorkerAction()
{
$request = $this->getRequest();
$workers = new table_1();
if (!$worker) {
$res = array(
'success' => false,
'data' => 'empty',
);
}
else {
$card = $worker->findParentRow('Table2');
$res = array(
'success' => true,
'data' => array_merge($worker->toArray(), $card->toArray()),
);
}
$this->_helper->json($res);
}问题是:
为每个地方的每个表生成select,对我来说似乎是床上的解决方案。在这种情况下,我应该如何为findParentRow生成选择
发布于 2011-07-20 16:40:37
听起来,您需要一种方法来指定要从父表中选择哪些字段,而不必编写整个$select。这将需要一个自定义行类。ZF提供了一种简单的方法来做到这一点。在依赖表类中,添加如下所示的rowClass行:
class Table2 extends Zend_Db_Table_Abstract {
...
protected $_rowClass = 'CustomTableRow';
...
}然后使您的自定义类如下所示,它覆盖findParentRow方法,允许您输入一个简单的字段名数组:
class CustomTableRow extends Zend_Db_Table_Row {
public function findParentRow($parentTable, $ruleKey = null, Zend_Db_Table_Select $select = null, array $fields = array()) {
if ($fields) {
if ($select) {
$select->columns($fields);
} else {
if (is_string($parentTable)) {
$parentTable = $this->_getTableFromString($parentTable);
} else if (!$parentTable instanceof Zend_Db_Table_Abstract) {
throw new Exception("Parent table parameter can only be a string or an instance of Zend_Db_Table_Abstract");
}
$select = $parentTable->select()
->from($parentTable, $fields);
}
}
return parent::findParentRow($parentTable, $ruleKey, $select);
}
}如果Zend_Db_Table_Row_Abstract没有指定第三个输入必须是Zend_Db_Table_Select的实例,就会更容易一些,因为这样我们就可以自动检查输入是否是列名数组,而不是该类的实例。因此,我们自己添加了第四个输入,并将这个逻辑放入方法中。现在,您可以在控制器中执行类似的操作:
$worker->findParentRow('Table2', null, null, array('field1', 'field2', ...));https://stackoverflow.com/questions/6621750
复制相似问题