helloworld1987 发表于 2009-4-25 21:49:47

关于CI的数据库操作

本帖最后由 helloworld1987 于 2009-4-25 21:50 编辑

刚开始学习CI,看到手册上说:CI在插入数据的时候,可以使用数组,也可以使用对象.
比如:
使用数组插入:

$data = array(
    'title'    =>    'test',
    'body'    =>    'test body'
);
$this->db->insert('tableName',$data);

使用对象插入:

class obj extends Model
{
    public $title;
    public $body;

    public function add()
    {
      // 请注意:这是的第二个参数是当前对象
      // 我看手册上是这样写的
      // 第一个疑问: 这个的参数为对象时,实际上是插入了这个对象的每个属性的值吗?
      $this->db->insert('tableName',$this);
    }
}

第二个疑问:如果我在修改时,也想将对象作为参数来修改,但是我又想只修改其中一个字段,比如title,那么body就会保持为空,如果这样,它应该会把我body及其他字段也给修改了,这样怎么办?

不知道大家明白了没有,可能我表达的不太好,在这里贴上一段代码,是我写的一个Model,供大家参考一下,可能要直观一点:

<?php
class Blog_model extends Model
{

public $a_id;
public $a_title;
public $a_body;
public $a_user;
public $a_date;

public function __construct()
{
parent::Model();
$this->load->database();
}

/**
* 读取列表
*
* @return unknown
*/
public function read_list()
{
$this->db->from('article');
return $this->db->get();
}

/**
* 添加方法
*
* 这里添加的时候,我参数使用的是$this
* 因为我看手册上是这样写的,但是又没有详细说明,只简短介绍了下这种方式
* 但是我很喜欢这种方式,希望大家能说明一下:
* $this->db->insert($this);
* 我将对象作为参数 传给insert方法,那么是否将这个对象的属性转换成了一个数组:
* array(
*   'title'=>'',
*   'body'=>''
* )
*
*/
public function add()
{
$this->db->from('article');
$this->db->insert($this);
}

/**
* 修改方法
* 注意这个方法,不知道这样写有没有错
* 如果我在外部修改的时候是这样的:
*
* $this->Blog_model->title = 'hello world!';
* $this->Blog_model->update();
*
* 这样是只修改了 blog 对象的title属性,那么我将这个对象作为参数传给 db 的 update 方法,它会不会修改我其他的信息?比如 body ?
*
*/
public function update()
{
$this->db->from('article');
$this->db->where('a_id',$this->a_id);
$this->db->update($this);
}

/**
* 删除方法
*
*/
public function delete()
{
$this->db->delete($this->a_id);
}
}
?>

visvoy 发表于 2009-4-25 22:03:26

无法避免,除非自己扩展CI的active record

用物件做insert/update等操作,该物件内的全部非object参数都会变成数据库字段,
详见active record的set()方法和_object_to_array()方法

helloworld1987 发表于 2009-4-25 22:07:23

2# visvoy

谢谢你的指教哦
这样的话,看来还是得先转化为 array,然后再插入了

Hex 发表于 2009-4-25 23:42:09

最好使用数组操作数据库,直观不容易出错。
页: [1]
查看完整版本: 关于CI的数据库操作