在codeigniter中插入活动记录数据库

时间:2012-12-19 13:18:49

标签: codeigniter activerecord

我正在开发一个项目(使用codeigniter),我使用了大量的Active记录。

我面临的问题如下:

我收到一个数据数组,我必须使用以下方法填写几个表:

$this->db->insert('db_name', $data);

现在有时$ data包含表格中没有的元素,所以我必须做类似的事情:

unset($data['action']);
unset($data['date']);

在插入之前或我只是构建另一个包含特定表的完全相同元素的数组。

$arr = array( 'x' => $data['x'])

之前我已经使用过Kohana,我知道当您使用ORM插入时,它只会忽略特定表中不可用的元素。

Codeigniter中有类似的内容吗?

PS)不使用任何外部库

2 个答案:

答案 0 :(得分:1)

CI ActiveRecord不是ORM。如果您想将ORM与codeignter一起使用,那么您唯一的选择 就可以使用第三方库:http://datamapper.wanwizard.eu/

您可以在将数组发送到数据库之前循环遍历数组并取消设置不包含任何内容的数据(如果实际上描述符是空元素):

foreach($data as $k => $v){
    if($v == ''){
        unset($data[$k]);
    }
}

否则,您可以创建switch spaghetti来根据数据库和发送数据的页面取消设置元素:

switch ($page){
    case "page1":
        unset($data['blah']);
    break;
    ....
}

答案 1 :(得分:1)

据我所知,CI的Active Record中不存在这样的内置功能(顺便说一句,它不是ORM)。

如果手动取消设置数组元素太麻烦了,那么自动进程看起来像:

function my_insert ($table, $data) {
    $query = $this->db->query('SHOW columns FROM '.$table);
    $columns = array();
    foreach ($query->result_array() as $row) {
        $columns[] = $row['Field'];
    }

    foreach ($data AS $key => $value) {
        if (!in_array($key, $columns)) {
            unset($data[$key]);
        }
    }

    $this->db->insert($table, $data);
}

它没有经过测试,可能还需要其他一些检查,但这可以帮助你起飞。