我希望我能以一种可以理解的方式提出这个问题。我一直在研究一个处理1个表(jobschedule)的应用程序。所以,我有模型/ Jobschedule.php,models / JobscheduleMapper.php,controllers / JobscheduleController.php,view / scripts / jobschedule / * .phtml文件
所以在我的控制器中我会做这样的事情:
$jobnumber = $jobschedule->getJobnum();
$jobtype = $jobschedule->getJobtype();
$table = $this->getDbTable();
public function listAction()
{
$this->_helper->layout->disableLayout();
$this->view->jobnum = $this->getRequest()->getParam( 'jobnum', false );
$this->view->items = array();
$jobschedule = new Application_Model_Jobschedule();
$jobschedule->setJobnum( $this->view->jobnum );
$mapper = new Application_Model_JobscheduleMapper();
$this->view->entries = $mapper->fetchAll ( $jobschedule );
}
然后在我的映射器中我做了类似的事情:
$resultSet = $table->fetchAll($table->select()->where('jobnum = ?', $jobnumber)->where('jobtype = ?', $jobtype) );
$entries = array();
foreach ($resultSet as $row) {
$entry = new Application_Model_Jobschedule();
$entry->setJobnum($row->jobnum)
->setJobtype($row->jobtype)
->setJobdesc($row->jobdesc)
->setJobstart($row->jobstart)
->setJobend($row->jobend)
->setJobfinished($row->jobfinished)
->setJobnotes($row->jobnotes)
->setJobid($row->jobid);
$entries[] = $entry;
}
return $entries;
}
然后在我看来,我可以操纵$条目。好吧,我现在遇到的问题是还有另一个名为'jobindex'的表,其中有一个名为'jobno'的列。 'jobno'列与'jobschedule'表中的'jobnum'列保持相同的记录。我需要在'jobindex'表中找到'store_type'列的值,其中jobindex.jobno = joschedule.jobnum(其中1234是jobno / jobnum)。有人可以帮我吗?我是否需要创建jobindex映射器和控制器?如果是这样,那就完成了...我只是不知道如何一次操纵两个表并得到我需要的记录。那把代码放在我的控制器里?
答案 0 :(得分:0)
如果我正确理解你,你会想把'jobindex'表加入'jobschedule'表。
...
$resultSet = $table->fetchAll(
$table->select()->setIntegrityCheck(false)
->from($table, array('*'))
->joinLeft(
'jobindex',
'jobindex.jobno = jobschedule.jobnumber',
array('store_type'))
->where('jobnum = ?', $jobnumber)
->where('jobtype = ?', $jobtype)
->where('jobindex.store_type = ?', $_POST['store_num'])
);
....
根据'jobschedule'与'jobindex'的关联方式,您可能需要内部联接(joinInner()
)。
setIntegrityCheck(false)
禁用表之间的引用完整性,这只有在您写入时才重要。对于像这样的查询,你可以禁用它并继续前进(否则它会引发异常)。
答案 1 :(得分:0)
如果我理解正确,那么您需要从数据库中提取数据的SQL查询:
SELECT `jobschedule`.* FROM `jobschedule` INNER JOIN `jobindex` ON jobindex.jobno = jobschedule.jobnum WHERE (jobindex.jobtype = 'WM')
在Zend中组装这个SQL查询看起来像这样:
$select->from('jobschedule', array('*'))
->joinInner(
'jobindex',
'jobindex.jobno = jobschedule.jobnum',
array())
->where('jobindex.jobtype = ?', $jobtype);
如果您正在寻找,请告诉我们。