переименовать поля в Zend select / join query

У меня есть 2 таблицы:

область, край: region_id, name, state_id
государство: state_id, name

Я хочу оба имени в моем результате, state.name переименован в StateName.
Пока я получил это:

$select = $select->from(array('r' => 'region'))->join(array('s' => 'state'),
'r.state_id = s.state_id',array("statename" =>"r.name"));

что приводит к следующему запросу:

SELECT `r`.*, `r`.`name` AS `statename` FROM `region` AS `r`
INNER JOIN `state` AS `s` ON r.state_id = s.state_id

Так что мне просто нужно изменить r.name AS statename в s.name AS statename.
Но я не могу заставить его работать. Если я изменю последнюю часть выбора на array("statename" =>"s.name")я получаю ошибку

Select query cannot join with another table

Итак, как я могу переименовать поле в соединительной таблице?

0

Решение

Вы должны удалить проверку целостности.

    $table = new self();
$select = $table->select()->setIntegrityCheck(false);
$select = $select->from(array('r' => 'region'))->join(array('s' => 'state'),'r.state_id = s.state_id',array("statename" =>"s.name"));

Проверка целостности предназначена для того, чтобы убедиться, что ваш запрос не будет использовать столбцы из другой таблицы, поэтому объекты Zend_Db_Table_Row могут быть обновлены, сохранены или удалены. Если вы удалите целостность, вы скажете Zend, что знаете, что делаете, и хотите использовать столбцы из другой таблицы.

Вот краткое объяснение из документации:

Zend_Db_Table_Select в основном используется для ограничения и проверки
так что он может применять критерии для допустимого запроса SELECT. тем не мение
могут быть определенные случаи, когда вам требуется гибкость
Компонент Zend_Db_Table_Row и не требует записи или удаления
строка. для этого конкретного случая пользователя можно получить строку или
набор строк путем передачи значения FALSE в setIntegrityCheck (). Результирующий
строка или набор строк будут возвращены как «заблокированная» строка (то есть save (),
delete () и любые методы установки полей будут вызывать исключение).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]