2012-11-09 32 views
2

我使用CodeIgniters DBforge來使用我的數據庫。CodeIgniter/dbForge - 多個鍵

我試圖將普通的PHP腳本轉換爲CodeIgniter,並且在將SQL更改爲dbforge時遇到了一些麻煩。

我有以下SQL代碼

CREATE TABLE `message2_recips` (
    `mid` int(10) unsigned NOT NULL, 
    `seq` int(10) unsigned NOT NULL, 
    `uid` int(10) unsigned NOT NULL, 
    `status` char(1) NOT NULL default 'N', 
    KEY `m2r1` USING BTREE (`mid`,`status`), 
    KEY `m2r2` USING BTREE (`uid`,`status`) 
) ENGINE=InnoDB; 

一切正常,除了當我到達2個鍵值位於底部。

一切我都試過似乎沒有起作用,包括

$this->dbforge->add_key(array('mid', 'status')); 
$this->dbforge->add_key(array('uid', 'status')); 

任何幫助翻譯,這將不勝感激,我似乎無法找到任何方式來輸入此使用dbforge,這使我的項目一個完整的停頓

謝謝。

+0

只是出於好奇,爲什麼不能正常使用的DB類和SQL創建表? –

+1

@TimWithers - 對於這個項目,我認爲我會嘗試遷移,因爲它的所有源代碼控制,我想部署到各個地方,而不需要觸摸數據庫...我讀dbforge是這樣做的方式 – BigJobbies

+0

CodeIgniter文檔說, : 「... add_key()後面必須跟一個create_table()的調用」 - http://codeigniter.com/user_guide/database/forge.html 這可能是造成這個問題嗎?此外,dbForge實際上只是SQL功能的一個方便包裝 - 我發現我不得不延長它幾次來構建我需要的靈活性。 – adomnom

回答

1

無法通過DB Forge(當前)通過DB Forge進行操作 - 它不支持表鍵的其他選項。您只能通過之後添加原始SQL查詢來實現這一點。

+0

啊,這是有道理的...感謝澄清。 – BigJobbies

0

有一個在DB_forge.php

的bug,需要刪除is_array條件,使多個鍵(在MySQL驅動程序有功能轉換的數組鍵到多個鍵)。

DBForge.php:101

刪除:

if (is_array($key)) 
    { 
     foreach ($key as $one) 
     { 
      $this->add_key($one, $primary); 
     } 

     return; 
    }