JoinLeft Zend Framework, одинаковые имена полей в разных таблицах - PullRequest
4 голосов
/ 22 ноября 2011

У меня проблема. Я пытаюсь соединить две таблицы с Zend Framework, используя объект $ select. К сожалению, у моих таблиц есть общее поле «имя», и когда я соединяю одно с другим, результаты, которые я получаю, это то, что поле имени из таблицы перезаписывает поле имени из другого.

Мой код выглядит примерно так:

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

Как я могу присоединиться к таблицам и избежать этой проблемы?

Ответы [ 2 ]

4 голосов
/ 25 сентября 2012

Полагаю, уже поздно, но чтобы получить все поля из двух таблиц, вы должны создать псевдоним для всех полей

$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(
    ...
));
4 голосов
/ 22 ноября 2011

Используйте псевдонимы таблиц, как в обычном 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...