【问题标题】:Datamapper with existing database- tables with primary key column name other than id具有现有数据库的数据映射器 - 主键列名称不是 id 的表
【发布时间】:2013-12-26 11:02:57
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: php codeigniter datamapper codeigniter-datamapper


    【解决方案1】:

    除了编辑本机数据映射器库之外,我没有找到任何解决方案。我修改了/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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-20
      • 2019-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 2019-07-24
      • 1970-01-01
      相关资源
      最近更新 更多