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

发布于 2024-12-17 08:03:33 字数 303 浏览 1 评论 0原文

我有一个问题。我正在尝试使用 $select 对象通过 Zend Framework 左连接两个表。不幸的是,我的表有公共字段“名称”,当我将一个表与另一个表连接时,得到的结果是表中的名称字段覆盖了另一个表中的名称字段。

我的代码是这样的:

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

如何连接表并避免此问题?

I've got a problem. I'm trying to left join two tables with Zend Framework using $select object. Unfortunatly my tables has common field 'name' and when I'm joining one with the other the results I get is that name field from table overwrites the name field from the other.

My code is something like that:

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

How I can join tables and avoid this issue?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一瞬间的火花 2024-12-24 08:03:33

像在任何普通 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;

Use table aliases as you would in any normal sql query!

With Zend_Db aliases are written like this:

$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

The non-zend query would look like this:

SELECT p.product_id, p.product_name 
FROM products AS p 
JOIN line_items AS l ON p.product_id = l.product_id;
因为看清所以看轻 2024-12-24 08:03:33

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

$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(
    ...
));

I guess it's bit late but to get all fields from two tables you must alias all the fields

$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') ); 

And your array would look like:

array(
0=>array(
    'u.id'=>'1',
    'u.employee_id'=>'1',
    'u.name'=>'John Doe',
    'e.id'=>'1',
    'e.name'=>'Worker'
),
1=>array(
    ...
));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文