0

この質問をわかりやすい方法で質問していることを願っています。私は1つのテーブル( jobschedule )を扱っているアプリに取り組んできました。したがって、models/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 );
}

そして、私のマッパーIIで次のようにします:

        $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;
    }

次に、私の見解では、$entries を操作できます。さて、私が今直面している問題は、「jobno」という列を持つ「jobindex」という別のテーブルもあるということです。その「jobno」列には、「jobschedule」テーブルの「jobnum」列と同じレコードが保持されます。jobindex.jobno = joschedule.jobnum である「jobindex」テーブルの「store_type」列の値を見つける必要があります (1234 は、たとえば jobno/jobnum です)。誰かがここで私を助けてくれますか? jobindex マッパーとコントローラーを作成する必要がありますか? もしそうなら、それは完了です...両方のテーブルを一度に操作して、必要なレコードを取得する方法がわかりません。そして、そのコードをどこに配置するのですか...コントローラーのどこに?

4

2 に答える 2

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)参照整合性を無効にします。これは、テーブルに書き込む場合にのみ重要です。このようなクエリの場合は、無効にして先に進むことができます(そうでない場合は例外がスローされます)。

于 2012-04-11T01:41:11.747 に答える
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);

それがあなたが探しているものかどうかお知らせください。

于 2012-04-11T08:06:49.167 に答える