joinLeft Zend Framework,不同表中的相同字段名

时间:2011-11-21 21:20:10

标签: zend-framework select left-join zend-db

我遇到了问题。我正试图使用​​$ select对象与Zend Framework连接两个表。不幸的是,我的表格有一个共同的字段“名称”,当我加入另一个时,我得到的结果是表中的名字字段覆盖了另一个名字字段。

我的代码是这样的:

$select->joinLeft ( array ('users' => 'users' ), $this->_name . '.employee_id = users.user_id', array ('*' ) );

如何加入表并避免此问题?

2 个答案:

答案 0 :(得分:4)

像在任何普通的sql查询中一样使用表别名!

使用Zend_Db别名是这样写的:

$select = $db->select()
         ->from(array('p' => 'products'),
                array('product_id', 'product_name'))
         ->join(array('l' => 'line_items'),
                'p.product_id = l.product_id',
                array() ); // empty list of columns

非zend查询看起来像这样:

SELECT p.product_id, p.product_name 
FROM products AS p 
JOIN line_items AS l ON p.product_id = l.product_id;

答案 1 :(得分:4)

我想现在有点迟了但要从两个表中获取所有字段,你必须为所有字段添加别名

$select = $db->select()
     ->from(array('u' => 'users'),
            array('u.id'=>'u.id','u.employee_id'=>'u.employee_id','u.name'=>'u.name'))
     ->joinLeft(array('e' => 'employees'),
            'e.id = u.employee_id',
            array('e.id'=>'e.id','e.name'=>'e.name') ); 

你的数组看起来像:

array(
0=>array(
    'u.id'=>'1',
    'u.employee_id'=>'1',
    'u.name'=>'John Doe',
    'e.id'=>'1',
    'e.name'=>'Worker'
),
1=>array(
    ...
));