我想为不同客户的所有表设置动态前缀。假设我有客户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() { 父:: _ setupTableName(); $ prefix ='StackOverflow'; //也许来自配置.. $ this-&gt; name = $ prefix。 ''。 $这 - &GT; _name; } }
(StackOverflow只是一个固定的值,但它是用于测试的,我从这里复制粘贴它:P)
答案 0 :(得分:0)
我不确定这是否能解决你的问题,但是没有理由使用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')));
然后从那里开始。