- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在考虑将 DataMapper ORM 与 CodeIgniter 结合使用,但遇到数据库结构格式不正确的情况。
我希望能够配置我的模型以将数据库字段名称映射到更符合逻辑的内容。然后,当我们着手更新数据库结构时,我可以只更新模型,所有引用代码将继续工作。
DataMapper ORM 可以做到这一点吗?
最佳答案
是的,这是可能的。我可以解释逻辑以及您如何使用 codeigniter 应用程序的自定义核心类来解决问题。
在 application/core/中创建一个文件并将其标记为 Mapdm.php
在文件中写入以下内容。
class Mapdm {
private $map_fields = array();
function __construct($modelClass_name, $map_fields = array()){
$this->_model = new $modelClass_name(); /* instantiate Model */
$this->map_fields = $map_fields;
}
function __get($name){
if(isset($this->map_fields[$name])){
$name = $this->map_fields[$name];
}
return $this->_model->{$name};
}
function __set($name, $value){
if(isset($this->map_fields[$name])){
$name = $this->map_fields[$name];
}
return $this->_model->{$name} = $value;
}
function __call($name, $args){
return call_user_func_array(array($this->_model, $method), $args);
}
}
要在您的 Controller 中使用它,只需在 Controller 构造函数类中实例化此类,如下所示。为了简化数组中的表字段映射数据,您可以选择将数组数据存储在自定义配置文件中。
例子。 map_field_config.php(文件内容)
$config['mapfield'][{modelname}] = array ('fieldA'=>'real_fieldname', 'fieldB'=>'real_fieldname2');
Controller 文件设置
class ControllerName extends CI_Controller{
function __construct(){
parent::__construct();
$mapfields = $this->config->item('mapfield', $mapfields);
$model_fields = $mapfields['mymodel'];
$this->mymodel = new Mapdm('mymodel');
}
function index(){
$records = $this->mymodel->get();
}
}
我没有测试过这段代码,但我写它只是为了给你一个想法。这就像为 Datamapper 模型创建一个包装器对象并使用包装器调用方法和属性。包装器应始终检查并将正确的表字段名称返回给数据映射器对象。
关于php - 使用 DataMapper ORM for php 映射字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5852087/
我正在阅读 Zend Framework 快速入门教程,在他们的演示代码中,他们使用了一个数据映射器,该映射器使用 Zend_DB_Table 来访问数据库(参见:http://framework.z
到目前为止,我一直在所有c#数据库驱动的应用程序中使用Active记录。但是现在我的应用程序需要将我的持久性代码与业务对象分开。我已经阅读了很多有关Martin Fowler的数据映射模式的文章,但是
我读过很多有关 DataMapper 模式的内容。 据我所知,DataMapper 应该将表单模型对象映射到实体对象。因此被用作某种适配器。 我理解正确吗? 最佳答案 不,Data Mapper是关于
我正在尝试使用新的 DataMapper 模型映射遗留 MySQL 数据库。 MySQL 模式: CREATE TABLE IF NOT EXISTS `backer` ( `backer_id`
我有一个带有几个字段和唯一约束的数据映射器对象。实际上,这确保了每个用户 ID 每个日期代码只能创建一条记录。 class Form include Datamapper::Resource
问题是我无法将列类型更改为“文本” 这是我看到的错误: DarkBook:playground Justin$ rake migrate_up (in/Users/Justin/Dropbox/Bus
我只是希望以随机顺序返回 DataMapper 记录。 这是我的模型(使用 DataMapper 和 sqlite3 数据库): class Movie include DataMapper::R
我在以下代码中遇到关联问题。 我遇到的错误是对最后一行代码的评论。 编辑:我简化了代码... require 'rubygems' require 'data_mapper' # requires a
我正在使用 Ruby/Sinatra 和 Datamapper 编写网络应用程序。我有一些表,我想将数据预加载到其中。有没有最佳实践?例如。我有一个名为 references 的表 id name u
我正在使用带有 DataMapper MySql 数据库的简单 Sinatra 网络应用程序。我声明了一个具有属性的 Datamapper Post 类 property :created_at, D
我有以下模型 class TagType include DataMapper::Resource ## Relationships belongs_to :category has
我正在使用 Ruby 中的 Sinatra 和 Datamapper 编写一个简单的应用程序,但我遇到了一个问题 — 当我尝试将数据保存到我的 SQLite 数据库时,没有任何变化。但是当我尝试安装数
我有一张产品表,其中包含 SKU、名称等属性。 似乎我需要为每个类别的产品创建单独的表格,因为类别的功能种类繁多。 假设我有一张放 Boot 、工具和帽子的 table /类 我想(除非有更好的方法)
我正在用 PHP 编写一个必须写入三个持久层的系统: 一个网络服务 两个数据库(一个mysql一个mssql) 这是遗留系统的原因,无法更改。 我想使用 DataMapper 模式,并且我正在尝试建立
我有一个这样的数据库模式 DataMapper.setup :default, "sqlite://#{Dir.pwd}/image.db" class Image include DataM
我有两个看起来像这样的模型 class Stage include DataMapper::Resource property :id, Serial belongs_to :
使用以下模型,我正在寻找一种高效且直接的方法来返回所有具有 0 个父任务(本质上是顶级任务)的任务。我最终也想返回 0 个子任务之类的东西,所以一个通用的解决方案会很好。这是否可以使用现有的 Data
我目前正在开发一个基于现有数据库的新应用程序,使用 DataMapper 进行数据访问。但是,它在处理外键时的约定不是数据库使用的约定。 例子: class Invoice include Dat
谁能给我解释一下这是怎么回事吗? 这是我放在一起向大家展示的示例: class Person include DataMapper::Resource property :id, Serial
class Alpha include DataMapper::Resource property :id, Serial property :name, String has n
我是一名优秀的程序员,十分优秀!