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

Posted

技术标签:

【中文标题】在codeigniter中插入活动记录数据库【英文标题】:Active record db inserting in codeigniter 【发布时间】:2012-12-06 20:37:38 【问题描述】:

我正在做一个使用大量活动记录的项目(使用 codeigniter)。

我面临的问题如下:

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

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

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

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

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

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

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

Codeigniter 中有类似的东西吗?

PS) 不使用任何外部库

【问题讨论】:

【参考方案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;
    ....

【讨论】:

【参考方案2】:

据我所知,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);

它没有经过测试,可能需要进行一些其他检查,但这应该可以帮助您起飞。

【讨论】:

以上是关于在codeigniter中插入活动记录数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何在codeigniter活动记录中使用select插入记录

CodeIgniter - 如果新的或更新的重复记录则插入活动记录

Codeigniter 活动记录 - 插入点列

MySQL 函数和 CodeIgniter 活动记录

如何在codeigniter活动记录中获取特定数组

IF语句在哪里(codeigniter活动记录)