Я хочу установить динамический префикс для всех моих таблиц для разных клиентов. Скажем, у меня есть клиент 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)