用户
 找回密码
 入住 CI 中国社区
搜索
查看: 3033|回复: 3
收起左侧

关于CI的数据库操作

[复制链接]
发表于 2009-4-25 21:49:47 | 显示全部楼层 |阅读模式
本帖最后由 helloworld1987 于 2009-4-25 21:50 编辑

刚开始学习CI,看到手册上说:CI在插入数据的时候,可以使用数组,也可以使用对象.
比如:
使用数组插入:
PHP复制代码
 
$data = array(
    'title'    =>    'test',
    'body'    =>    'test body'
);
$this->db->insert('tableName',$data);
 
复制代码

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

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

不知道大家明白了没有,可能我表达的不太好,在这里贴上一段代码,是我写的一个Model,供大家参考一下,可能要直观一点:
PHP复制代码
 
<?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);
}
}
?>
 
复制代码
发表于 2009-4-25 22:03:26 | 显示全部楼层
无法避免,除非自己扩展CI的active record

用物件做insert/update等操作,该物件内的全部非object参数都会变成数据库字段,
详见active record的set()方法和_object_to_array()方法
 楼主| 发表于 2009-4-25 22:07:23 | 显示全部楼层
2# visvoy

谢谢你的指教哦
这样的话,看来还是得先转化为 array,然后再插入了
发表于 2009-4-25 23:42:09 | 显示全部楼层
最好使用数组操作数据库,直观不容易出错。

本版积分规则