具有除id之外的主键列名称的现有数据库表的Datamapper

时间:2013-12-09 10:59:45

标签: php codeigniter datamapper codeigniter-datamapper

我正在使用codeigniter框架运行应用程序。我有一个数据库。我想实现datamapper 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

1 个答案:

答案 0 :(得分:0)

除了编辑本机数据映射库之外,我没有找到任何解决方案。我修改了/application/libraries/datamapper.php中的datamapper类中的函数_get_by(),如下所示。我在模型中添加了var $table = 'user'; var $id = 'user_id';,并在datamappper库中添加了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();
}