thinkphp中curd的一些操作
一:增加数据
$user = M("User");
$data['name'] = 'ThinkPHP';
$data['email'] = 'lcxoooo@163.com';
$user->add($data);或者使用data方法连贯操作:$user->data($data)->add();
如果在add之前已经创建数据对象的话(例如使用了create或者data方法),add方法就不需要再传入数据了
一:更新数据,使用save,并且支持连贯操作的使用
$user = M("User");
$data['name'] = 'ThinkPHP';
$data['email'] = 'lcxoooo@163.com';
$user->where('id=5')->save($data);或者用
$user->where('id=5')->data($data)->save();
或者使用:
$user = M("User");
setField同时支持更新多个字段,只需传入数组即可
$user->where('id=5')->setField(array('name','email'),array('ThinkPHP','lcxoooo@163.com'));
$user = M('User');
$data['id'] = 5;
$data['name'] = 'ThinkPHP';
$data['email'] = 'lcxoooo@163.com';
$user->save($data);
如果id是数据表的主键的话,系统自动会把主键的值作为更新条件来更新其他字段的值
某个字段在原有的基础上增加减少
$user = M("User");
$user->setInc('score','id=5',3); //用户的积分增加3
$user->setInc('score','id=5');//用户的积分增加1
$user->setDec('score','id=5',5);//用户的积分减少5
$user->setDec('score','id=5');//用户的积分减少1
二:读取数据:
$user = M("User");
$user->where('status = 1')->order('create_time')->limit(10)->select();
select方法返回的是一个二维数组,如果没有查到任何结果的话,也是返回一个空的数组
$user = M("User");
$user->where('status = 1 AND name="think"')->find();
find方法只会返回第一条记录
$List = $Dao->where('uid<10 AND email="find">Jack@163.com"')->find();和下边的数组方式执行效果是一样的
数组方式
$user = M("User");
// 构建查询数组
$condition['uid'] = array('elt',10);
$condition['email'] = "lcxoooo@163.com";
$List = $user->where($condition)->find();
使用对象
$user = M("User");
// 定义查询条件
$condition = new stdClass();
$condition->uid = array('elt',10);
$condition->email = "lcxoooo@163.com";
$List = $user->where($condition)->find();
使用对象方式和使用数组方式的条件效果是相同的,并且是可以互换的。
LIMIT 限制
在查询中使用 LIMIT 限定数据返回的记录数:
// 查询数据
$list = $user->limit('4,5')->select();
这个例子就是将第 5-10 条记录取出,limit() 方法内的参数意义跟 SQL 语句中的 LIMIT 完全一致。
连贯操作
ThinkPHP 中允许将数据对象中的各个方法写在一起操作,如:
$list = $Dao->order('uid DESC')->limit('4,5')->select();
读取某个字段的值,可以使用getField方法
$user = M("User");
$user->where('id=3')->getField('nickname');该查询结果返回的是一个单独的变量即值不是数组
如果传入两个个字段,则返回一个关联数组
$list = $user->getField('id','nickname');
返回的list是一个数组,键名是用户的id,键值是用户的昵称nickname
如果传入三个即以上
mixed getField( string fields, mixed condition, string spea)
fields 必须,需要查询的字段名称,可以是一个或多个字段
condition 可选,查询条件,可以是字符或数组,参考 select 方法查询条件
spea 可选,多个字段数据生成关联数组时,数据间隔符号,默认为空格
eg:
    public function select(){
    header("Content-Type:text/html; charset=utf-8");
    $Dao = M("User");
    $list = $Dao->getField('uid,username,email','uid < 4','|');
    dump($list);
}
array(3) {
  [1] => string(21) "admin|admin@5idev.com"
  [2] => string(23) "小明|xiaoming@163.com"
  [3] => string(19) "Jack|jack@gmail.com"
}
ThinkPHP getBy动态查询
public function chekUser(){
    header("Content-Type:text/html; charset=utf-8");
    $Dao = M("User");
    // 查询数据
    $user = $Dao->getByUsername('Admin');
    if($list){
        echo '用户名存在';
    }else{
        echo '用户名不存在';
    }
}
方法中传入的参数是查询的字段对应的值,上面例子执行的 SQL 语句为:
SELECT * FROM user WHERE username = 'Admin' LIMIT 1
请注意,在getBy之后紧跟着的字段名称,首字母必须大写。对于如 user_name 这样的字段名称,以驼峰法自动识别下划线,即:
$user = $Dao->getByUserName('Admin');
实际使用中可以灵活根据查询的字段名来定义 getBy 放入,如:getByEmail、getByTitle、getById 等。

三:删除操作

$user = M("User");
删除所有状态为0的5个用户数据,按照创建时间排序
$user->where('status=0')->order('create_time')->limit('5')->delete();
$user->where('id=5')->delete(); //删除id为5的用户数据