2017-10-25 1 views
0

私はZF2に複数の左JOINを実装するのに苦労しています。私は最初に働いていますが、もう1つ追加するとうまくいきません。Zend Framework 2がエイリアスを使用して同じテーブルに複数回参加する

これは私がZF2に実装する必要が働いてSQLクエリです:

SELECT 
    ac.ctr_id AS ctr_id, 
    ac.ctr_no AS ctr_no, 
    ac.ctr_marketer AS marketer, 
    ac.ctr_manager AS manager, 
    ac.ctr_recruiter AS recruiter, 
    l1.emp_realname AS marketer, 
    l2.emp_realname AS co_recruiter_manager, 
    l3.emp_realname AS recruiter 
FROM 
    allcontracts AS ac 
     JOIN 
    lstemployees AS le ON ac.ctr_recruiter = le.emp_id 
     LEFT JOIN 
    lstemployees AS l2 ON ac.ctr_manager = l2.emp_id 
     LEFT JOIN 
    lstemployees AS l3 ON ac.ctr_recruiter = l3.emp_id 
     LEFT JOIN 
    lstemployees AS l1 ON ac.ctr_marketer = l1.emp_id 

私のモデルから:

..... 

     $where = new Where(); 
     $this->table='allcontracts'; 

     $select = new Select($this->table); 
     $select->columns(array('*')); // TODO add columns from allcontracts table 

    // This one works 
    $select->join('lstemployees', 'allcontracts.ctr_recruiter = lstemployees.emp_id'); 

    // When I add this one below it doesn't work 
    $select->join(array('l2' => 'lstemployees'), 'allcontracts.ctr_manager = l2.emp_id', array('*'), 'left'); 


    $where->like('ctr_no', '%LT'); 

    if($id!='' && $id > 0) 
     $where->equalTo('ctr_id', $id); 

    $select->where($where); 
    $resultSet = $this->selectWith($select); 

...... 

任意のアイデア?ここで

答えて

1

は、私が提案するものです。

<?php 
use Zend\Db\Sql\Select; 

$select = new Select(); 
$select->columns([Select::SQL_STAR]) 
    ->from(['ac' => 'allcontracts ']) 
    ->join(['le' => 'lstemployees'], 'ac.ctr_recruiter = le.emp_id', []) 
    ->join(['l1' => 'lstemployees'], 'ac.ctr_marketer = l1.emp_id', ['marketer' => 'emp_realname'], Select::JOIN_LEFT) 
    ->join(['l2' => 'lstemployees'], 'ac.ctr_manager = l2.emp_id', ['co_recruiter_manager' => 'emp_realname'], Select::JOIN_LEFT) 
    ->join(['l3' => 'lstemployees'], 'ac.ctr_recruiter = l3.emp_id', ['recruiter' => 'emp_realname'], Select::JOIN_LEFT); 

// to debug your query  
die($select->getSqlString($dbAdapter->getPlatform())); 
// if you haven't $dbAdapter, replace by null but the result will be quoted. 
+0

おかげアラン。私はこのエラーを取得しています。このオブジェクトはコンストラクタでテーブルやスキーマを使って作成されたため、読み込み専用です。ここに説明があります[https://stackoverflow.com/questions/15876755/many zend-2-frameworkでの多対多関係)。 – Blackcoat77

関連する問題