2013-12-09 40 views
0

我正在運行使用codeigniter框架的應用程序。我有一個數據庫。我想實現數據映射器ORM。因爲對於datamapper-「每個表都必須有一個名爲id的主鍵」。帶有主鍵列名以外的現有數據庫表的數據映射表

我在所有表中都有一個自動增量整數字段。但列名在所有情況下都不是「id」。在我的user表中,自動遞增整數列名稱是user_id而不是id。我需要做什麼修改才能使用Datamapper?

A Database Error Occurred 

Error Number: 1054 

Unknown column 'id' in 'where clause' 

SELECT * 
FROM (`user`) 
WHERE `id` = 200 

Filename: D:\Projects\DealVector\dealvector\system\database\DB_driver.php 

Line Number: 330 

回答

0

除編輯本地數據映射器庫外,沒有找到任何解決方案。我修改了/application/libraries/datamapper.php中datamapper類中的函數_get_by(),如下所示。我在我的模型中添加了var $table = 'user'; var $id = 'user_id';,並在數據映射庫中添加了if($field=='id'){ $field = $this->id; }

/** 
* Get By 
* 
* Gets objects by specified field name and value. 
* 
* @ignore 
* @param string $field Field to look at. 
* @param array $value Arguments to this method. 
* @return DataMapper Returns self for method chaining. 
*/ 
private function _get_by($field, $value = array()) 
{ 
    //Custom Change 
    if($field=='id'){ 
     $field = $this->id; 
    } 

    if (isset($value[0])) 
    { 
     $this->where($field, $value[0]); 
    } 

    return $this->get(); 
}