php - 使用 DataMapper ORM for php 映射字段名称

标签 php codeigniter orm codeigniter-datamapper

我正在考虑将 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/

相关文章:

PHP Wordpress 插件 - 函数输出可以,但更新数据库时不行。

php - 处理自签名 SSL 证书

php - 如何使用 PHP 创建 zip 文件

php - codeigniter jquery ajax加载 View 页面

php - 通过codeigniter中的嵌套数组将多行插入数据库

.net - 最佳的.NET Web开发框架是什么?

orm - Sequelize 中的WhereHas 方法

php - 如何获取表中两个字段的自增id

php - 从 CodeIgniter 中的数据库获取下拉列表

java - Hibernate、MySQL 和名为 "Repeat"的表 - 奇怪的行为