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

在codeigniter中插入活动记录数据库,codeigniter,activerecord,Codeigniter,Activerecord,我正在做一个项目(使用codeigniter),在那里我使用了很多活动记录 我面临的问题如下: 我收到一个数据数组,我必须使用以下方法填写一些表格: $this->db->insert('db_name', $data); 现在,$data包含表中不可用的元素,因此我必须执行以下操作: unset($data['action']); unset($data['date']); 在插入之前,我只需构建另一个数组,该数组包含与特定表完全相同的元素 $arr = array( 'x'

我正在做一个项目(使用codeigniter),在那里我使用了很多活动记录

我面临的问题如下:

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

$this->db->insert('db_name', $data);
现在,$data包含表中不可用的元素,因此我必须执行以下操作:

unset($data['action']);
unset($data['date']);
在插入之前,我只需构建另一个数组,该数组包含与特定表完全相同的元素

$arr = array( 'x' => $data['x'])
我以前已经使用过Kohana,我知道当使用ORM插入时,它只会忽略特定表中不可用的元素

$arr = array( 'x' => $data['x'])
Codeigniter中有类似的东西吗


PS)不使用任何外部库

CI ActiveRecord不是ORM。如果要将ORM与Codeigner一起使用,您唯一的选择是使用第三方库:

在将数组发送到db之前,始终可以循环遍历该数组,并取消设置不包含任何内容的数据(如果事实上描绘器是空元素):

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

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

据我所知,像这样的内置功能在CI的活动记录中并不存在(顺便说一句,它不是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);
}
它没有经过测试,可能还需要一些其他检查,但这会帮助你起飞