一:链式操作总结
1.例子
//要获取的字段 $field_value = array( 'id', 'keyword' ); //where,默认多个字段是与的关系 $where = array( 'id' =>array('EGT',10), 'shopping_village' =>1, ); $contents = M('content',"crm_") ->field($field_value) ->where($where) ->order('crm_content.id DESC') ->limit(10) ->select();
//解析后的SQL
SELECT `id`,`keyword` FROM `crm_content` WHERE `id` >= 10 AND `shopping_village` = 1 ORDER BY crm_content.id DESC LIMIT 10
//_logic设置多个参数之间或的关系 $where = array( 'id' =>array('EGT',10), 'shopping_village' =>1, '_logic' =>'or', );
//解析后的SQL
SELECT `id`,`keyword` FROM `crm_content` WHERE `id` >= 10 OR `shopping_village` = 1 ORDER BY crm_content.id DESC LIMIT 10
//与或同时存在 $where_and = array( 'id' =>array('EGT',10), 'shopping_village' =>1, '_logic' =>'AND' ); $where = array( 'url_type' =>1, '_complex'=>$where_and, '_logic'=>'OR' );
//解析后的SQL
SELECT `id`,`keyword` FROM `crm_content` WHERE `url_type` = 1 OR ( `id` >= 10 AND `shopping_village` = 1 ) ORDER BY crm_content.id DESC LIMIT 10
2.连贯操作字段总结
连贯操作 | 作用 | 支持的参数类型 |
---|---|---|
where* | 用于查询或者更新条件的定义 | 字符串、数组和对象 |
alias | 用于给当前数据表定义别名 | 字符串 |
field | 用于定义要查询的字段(支持字段排除) | 字符串和数组 |
order | 用于对结果排序 | 字符串和数组 |
limit | 用于限制查询结果数量 | 字符串和数字 |
page | 用于查询分页(内部会转换成limit) | 字符串和数字 |
group | 用于对查询的group支持 | 字符串 |
having | 用于对查询的having支持 | 字符串 |
join* | 用于对查询的join支持 | 字符串和数组 |
union* | 用于对查询的union支持 | 字符串、数组和对象 |
distinct | 用于查询的distinct支持 | 布尔值 |
lock | 用于数据库的锁机制 | 布尔值 |
3.比较总结
表达式 | 含义 |
---|---|
EQ | 等于(=) |
NEQ | 不等于(<>) |
GT | 大于(>) |
EGT | 大于等于(>=) |
LT | 小于(<) |
ELT | 小于等于(<=) |
LIKE | 模糊查询 |
[NOT] BETWEEN | (不在)区间查询 |
[NOT] IN | (不在)IN 查询 |
4.使用原生SQL查询
$Model = M(); //进行原生的SQL查询 $Model->query('SELECT * FROM think_user WHERE status = 1');
二:实例化模型
1.直接实例化
$Blog = new HomeModelBlogModel();
2.使用D方法实例化自定义模型 若自定义模型不存在 则D函数会尝试实例化公共模块下面的 CommonModelUserModel
类
$Blog= D('Blog'); // 相当于 $Blog= new HomeModelBlogModel();
3.使用M方法实例化模型 可以进行基本的CURD操作
// 使用M方法实例化 $Blog = M('Blog');
三:使用D方法实例化模型的好处
1.自动验证参数正确性
namespace HomeModel; use ThinkModel; class UserModel extends Model{ protected $_validate = array( array('verify','require','验证码必须!'), //默认情况下用正则进行验证 array('name','','帐号名称已经存在!',0,'unique',1), // 在新增的时候验证name字段是否唯一 array('value',array(1,2,3),'值的范围不正确!',2,'in'), // 当值不为空的时候判断是否在一个范围内 array('repassword','password','确认密码不正确',0,'confirm'), // 验证确认密码是否和密码一致 array('password','checkPwd','密码格式不正确',0,'function'), // 自定义函数验证密码格式 ); }
$User = D("User"); // 实例化User对象 if (!$User->create()){ // 如果创建失败 表示验证没有通过 输出错误提示信息 exit($User->getError()); }else{ // 验证通过 可以进行其他数据操作 }
2.自动完成规则
protected $_auto = array ( array('status','1'), // 新增的时候把status字段设置为1 array('password','md5',3,'function') , // 对password字段在新增和编辑的时候使md5函数处理 array('name','getName',3,'callback'), // 对name字段在新增和编辑的时候回调getName方法 array('update_time','time',2,'function'), // 对update_time字段在更新的时候写入当前时间戳 );
$User = D("User"); // 实例化User对象 if (!$User->create()){ // 创建数据对象 // 如果创建失败 表示验证没有通过 输出错误提示信息 exit($User->getError()); }else{ // 验证通过 写入新增数据 $User->add(); }