2011-01-23 7 views
0

異なる顧客のすべてのテーブルに動的プレフィックスを設定したいとします。私は顧客Aを得て、私のテーブルは "a_tablename"などとなるでしょう。Zend Frameworkテーブルプレフィックスと結合が失敗する

これはすべて正常に動作しますが、Zendフレームワークでjoin-queryを実行すると、デフォルトテーブル"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 を拡張{ 関数_setupTableName(){ 親:: _ setupTableName(); $ prefix = 'StackOverflow'; //多分configから。 $ this->名前= $接頭辞。 '' $ this - > _ name; } }

(StackOverflowのがoffcourseだけで固定値であるが、それはテストのためだと私はコピー&ペーストして、ここから:P)

答えて

0

私は、これはあなたの問題を解決するかどうかわからないんだけど、あります実際にZend_Db_Table_Abstractのインスタンスを使用して結合を使ってクエリを実行する必要はありません。setIntegrityCheckを行う必要があります。ちょっと変わってしまいます。

あなたは自分のモデルから、あなたのテーブル名を取得し、あなたの一般的なDBハンドル使用したほうが良いかもしれません:

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

をし、そこから行きます。

関連する問題