簡體   English   中英

Zend Framework 2使用別名多次連接同一張表

[英]Zend Framework 2 join the same table multiple times using alias

我正在努力將多個左JOIN實施到ZF2中。 我有第一個工作,但是當我添加另一個時,它不工作。

這是我應該在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);

......

任何想法?

這是我的建議:

<?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.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM