1

我正在做一个项目(使用 codeigniter),我使用了很多 Active record 。

我面临的问题如下:

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

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

现在有时 $data 包含表内不可用的元素,所以我必须执行以下操作:

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

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

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

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

Codeigniter 中有类似的东西吗?

PS)不使用任何外部库

4

2 回答 2

1

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

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

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

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

switch ($page){
    case "page1":
        unset($data['blah']);
    break;
    ....
}
于 2012-12-19T14:04:46.990 回答
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);
}

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

于 2012-12-19T14:14:58.987 回答