2012-04-10 48 views
0

私は理解できる方法でこの質問をしたいと思います。私は1つのテーブル(jobschedule)を扱っているアプリケーションに取り組んできました。だから、私はモデル/ Jobschedule.php、モデル/ JobscheduleMapper.php、コントローラ/ JobscheduleController.php、ビュー/スクリプト/ jobschedule/*持ってPHTMLファイルにZend Frameworkテーブルの関係 - アプリケーション内の複数のテーブルから選択

をだから私のコントローラで、私はこのような何かをやります:。

私のマッパーで
$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; 
    } 

。さて、私が今直面する問題は、 'jobno'という列があるjobindexという別のテーブルがあるということです。その 'jobno'カラムは 'jobschedule'テーブルの 'jobnum'カラムと同じレコードを保持します。 jobindex.jobno = joschedule.jobnum(1234はjobno/jobnumなど)の 'jobindex'テーブルの 'store_type'カラムの値を調べる必要があります。誰かがここで私を助けてくれますか?ジョブインデックスマッパとコントローラを作成する必要がありますか?もしそうなら、それは終わりました...私はただ一度に両方のテーブルを操作し、必要なレコードを取得する方法を知りません。そして、そのコードをどこに置くべきか...私のコントローラーに?

答えて

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

+0

私はすぐにそれを試してみるつもりです。ご協力いただきありがとうございます。お待ちください。 –

+0

私は本当に自分自身を混乱させたと思う。私はもう一度説明をして、あなたが何か違うものを考え出すかどうかを見ます。 jobscheduleにjobnumという列があり、jobindexテーブルにjobnoという列があります。これらはそれぞれ同じ値を保持します。 jobindexテーブルにはstore_typeという行もあります。私はjobnoとjobnumが一致するすべてのレコードを見つけたいと思います。store_type ==私のPOSTで渡したいくつかのパラメータです。したがって、?store_type = WMの場合、jobscheduleテーブルのすべてのレコードをページに表示するとします。ここで、jobindexテーブルのstore_typeはWMと等しく、レコードのjobno = jobnumはjobscheduleからです。 –

+0

できるだけ具体的にしようとしています。センス。もしあなたが私に説明してもらうことが必要なのなら、私はそれを説明してくれるでしょう...これは数日間ナッツを運転しています。 –

0

私が正しくあなたを理解していれば、これはあなたがデータベースからデータを抽出する必要があるSQLクエリです:

$select->from('jobschedule', array('*')) 
    ->joinInner(
     'jobindex', 
     'jobindex.jobno = jobschedule.jobnum', 
     array()) 
    ->where('jobindex.jobtype = ?', $jobtype); 

してみましょう:Zendの中にこのSQLクエリを組み立て

SELECT `jobschedule`.* FROM `jobschedule` INNER JOIN `jobindex` ON jobindex.jobno = jobschedule.jobnum WHERE (jobindex.jobtype = 'WM') 

は、次のようになりますそれがあなたが探しているものなのかどうかはわかっています。

関連する問題