joinLeft Zend Framework, одинаковые имена полей в разных таблицах
У меня проблема. Я пытаюсь соединить две таблицы с помощью Zend Framework, используя $select object. К сожалению, у моих таблиц есть общее поле "Имя", и когда я соединяю одно с другим, результаты, которые я получаю, - это то, что поле имени из таблицы перезаписывает поле имени из другого.
Мой код примерно таков:
$select->joinLeft ( array ('users' => 'users' ), $this->_name . '.employee_id = users.user_id', array ('*' ) );
Как я могу объединить таблицы и избежать этой проблемы?
2 ответа:
Используйте псевдонимы таблиц, как и в любом обычном 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;
Я думаю, что это немного поздно, но чтобы получить все поля из двух таблиц, вы должны псевдонимы всех полей
$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( ... ));