Таблица Zend Framework префиксы и соединения не работают

Я хочу установить динамический префикс для всех моих таблиц для разных клиентов. Скажем, у меня есть клиент A, мои таблицы будут "a_tablename" и т. Д.

Все это работает нормально, вся настройка проходит хорошо, но когда я запускаю запрос соединения в среде Zend, он выбирает из таблицы по умолчанию («tablename»), а не из таблицы с префиксом.

Вот фрагмент моего кода:

$select = $hours->select()
  ->setIntegrityCheck(false)
  ->from(array('h' => 'hours'), array('id', 'type', 'remark', 'minutes', 'date'))
  ->join(array('p' => 'projects'), 'h.project_id = p.id', array('description' => 'description', 'order_nr' => 'order_nr'))
  ->join(array('c' => 'clients'), 'p.client_id = c.id', array('client' => 'name'))
  ->where($this->db->quoteInto('h.user_id = ?', $userId, 'INTEGER'))
  ->where($this->db->quoteInto('h.date >= ?', $startDate))
  ->where($this->db->quoteInto('h.date <= ?', $endDate))
  ->order(array('h.date', 'h.type'));
$rows = $hours->fetchAll($select);
$this->view->hours = $rows;

Это соединение принимает стандартную таблицу (клиенты), а в качестве несоединенных запросов выбирает таблицу клиентов 'a_clients'. Что мне не хватает? Вот мое расширение класса:

абстрактный класс Zend_Db_Table расширяет Zend_Db_Table_Abstract {function _setupTableName () {parent :: _ setupTableName (); $ prefix = 'StackOverflow'; // возможно из конфига .. $ this-> name = $ prefix. ''. $ this -> _ имя; }}

(StackOverflow, конечно, просто фиксированное значение, но он для тестирования, и я скопировал его отсюда: P)


person Simon    schedule 23.01.2011    source источник


Ответы (1)


Я не уверен, что это решит вашу проблему, но на самом деле нет причин использовать экземпляр Zend_Db_Table_Abstract для выполнения запроса с объединениями - это просто имеет тенденцию портить вещи (вам нужно выполнить вещь setIntegrityCheck ... это просто странно ).

Возможно, вам будет лучше просто получить имена таблиц из ваших моделей и использовать свой общий дескриптор БД:

$db = Zend_Registry::get('db');
// or, you might prefer:
$db =  Zend_Db_Table::getDefaultAdapter();
$db->select()->from(array('alias' => $hours->info('name')));

и идти оттуда.

person Stephen Fuhry    schedule 04.02.2011