接着上回书。
0x01 数据库与模型
ThinkPHP采用内置抽象层将不同的数据库操作进行封装处理。
即:数据抽象层基于PDO模式,无需针对不同的数据库编写相应的代码。
1. 不加Model:
两者的区别:(前缀)
$data=Db::table('bage_admin')->select();
$data=Db::name('admin')->select();
2. 使用Model:
Model即模型。
处理和配置数据库的相关信息。
建立Model:
打开配置文件并修改,然后跟踪SQL语句:
0x02 查询数据
1. 基本查询
Db::table()//必须指定完整数据表
Db::table()->where('id',1)->find()
//...还可以捕获异常
Db::name()//不需要指定前缀
2. 更多方式
1. \db()->select()
2. Db::name()->value()
3. Db::name()->column()
4. ...
0x03 链式查询
“->”:就是链式查询
返回了一个数据库连接对象;
接着链接:
使用find(),select()等来结束链式查询。
注意:
当同一个对象实例第二次进行查询后,会保留第一次查询到的值。
因此要使用removeOption()方法。
0x04 增删改
增:
Db->name()->insert($data);
方法,成功后会返回1.
或者Db->name()->data($data)->insert();
Db::name()->insertGetId($data);
方法,返回idinsertALL()
批量插入数据。
改:
Db::name()->where()->updata($data)
- …此处具体用法函数参见手册即可。
使用exp()方法可以直接在字段中执行mysql函数;
也可以使用raw()方法,直接进行修改更新。
删:
Db::name()->delete($data);
//删除主键对应的元素Db::name()->delete([1,2,3,...]);
Db::name()->where()->delete();
Db::name()->delete('true');
//全部删除
0x05 查询
1. 比较查询
在where中:
where('id','=',80);
where('id','<>',80);
等等…
2. 区间查询
-
使用like表达式进行模糊查询:
Db::name()->where('email','like','xiao%')->select();
-
like表达式还可以支持数组传递进行模糊查询:
Db::name()->where('emali','like',['xiao%','wu%'],'or')->select();
在SQL语句中表达式为:
SELECT * FROM 'tp_user' WHERE ("email" LIKE "xiao%" OR "email" LIKE "wu%");
3. 时间查询
给以上方法汇总:
4. 聚合、原生、子查询
聚合:
- count()
- max()
- min()
- …
子查询:
都是只返回SQL语句:(只是语句有无括号的区别)
原生查询:
就是直接使用SQL语句,利用query方法:
Db::query('select * from admin');
或者:
Db::execute('select * from admin');
0x06 链式方法
page方法是对limit方法的批量操作。
未完待续…