Zend Framework Tableprefixes和join失败

时间:2011-01-23 00:23:34

标签: database zend-framework join zend-db

我想为不同客户的所有表设置动态前缀。假设我有客户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)

1 个答案:

答案 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')));

然后从那里开始。