【问题标题】: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();
}