ThinkPHP(7)——数据库操作
2016-05-31 15:27
405 查看
连接数据库
实例化模型
实例化基础模型
实例化自定义模型
实例化空模型
增删改查
add
select
update
delete
order排序
field字段选择
limit
page分页
group和having
多表查询
table方法不常用
join方法
union查询
distinct
命名范围
ThinkPHP支持数据库的读写分离,如果要开启:
DB_RW_SEPARATE设为TRUE
DB_HOST多个数据库使用逗号隔开,主服务器要排在前面
DB_MASTER_NUM配置主服务器的数量
在定义UserModel的时候,ThinkPHP会自动将其和user表对应上。
如果你希望自己定义model和表的对应关系,可以使用以下属性:
例如:
注意:一定要加上protected关键字
也可以使用D方法实例化
使用D方法可以自动从\Home\Model中寻找模型
注意:如果在Linux环境下面,一定要注意D方法实例化的时候的模型名称的大小写。
add方法返回参数是插入的数据的id
插入多条数据
返回数据是插入的数据的第一条的id
注意:addAll方法只支持mysql数据库
例2:
例3:表达式查询
例4:模糊查询
例5:
例6:
例7:(不推荐使用这种混合的方式)
例8:统计用法(count,sum,min,avg,等)
或
注意:此处表名要写完整表名
可以使用right join,left join等关键字配置关联的方式
如果要关联多个表,可以多次使用join()方法
注意:union查询的两个表之间必须字段一样
命名范围就是上述的一些数据库操作进行一些封装,方便调用,例如:
对UserModel进行一些封装
然后调用
如果同时调用多个命名范围,使用逗号隔开
如果多个命名范围中有冲突,那么后面的会覆盖前面的
实例化模型
实例化基础模型
实例化自定义模型
实例化空模型
增删改查
add
select
update
delete
order排序
field字段选择
limit
page分页
group和having
多表查询
table方法不常用
join方法
union查询
distinct
命名范围
连接数据库
在config.php中配置数据库信息return array( //'配置项'=>'配置值' 'DB_TYPE' => 'mysql', // 数据库类型 'DB_HOST' => 'localhost,localhost1,localhost2', // 服务器地址 'DB_NAME' => 'test', // 数据库名 'DB_USER' => 'root', // 用户名 'DB_PWD' => '', // 密码 'DB_PORT' => '3306', // 端口 'DB_PREFIX' => '', // 数据库表前缀 'DB_PARAMS' => array(), // 数据库连接参数 'DB_DEBUG' => TRUE, // 数据库调试模式 开启后可以记录SQL日志 'DB_RW_SEPARATE' => false, // 数据库读写是否分离 主从式有效 'DB_MASTER_NUM' => 1, // 读写分离后 主服务器数量 );
ThinkPHP支持数据库的读写分离,如果要开启:
DB_RW_SEPARATE设为TRUE
DB_HOST多个数据库使用逗号隔开,主服务器要排在前面
DB_MASTER_NUM配置主服务器的数量
实例化模型
实例化基础模型
现有一张表user,可以使用new Model或M方法来实例化模型,并查询数据$user = new Model('user');//参数为表名 //$user = M('user'); $data = $user->select(); dump($data);
实例化自定义模型
也可以自定义一个UserModelnamespace Home\Model; use Think\Model; class UserModel extends Model{ }
$user = new \Home\Model\UserModel(); $data = $user->select();
在定义UserModel的时候,ThinkPHP会自动将其和user表对应上。
如果你希望自己定义model和表的对应关系,可以使用以下属性:
属性名 | 作用 |
---|---|
tablePrefix | 定义模型对应数据表的前缀,如果未定义则获取配置文件中的DB_PREFIX参数 |
tableName | 不包含表前缀的数据表名称,一般情况下默认和模型名称相同,只有当你的表名和当前的模型类的名称不同的时候才需要定义。 |
trueTableName | 包含前缀的数据表名称,也就是数据库中的实际表名,该名称无需设置,只有当上面的规则都不适用的情况或者特殊情况下才需要设置。 |
dbName | 定义模型当前对应的数据库名称,只有当你当前的模型类对应的数据库名称和配置文件不同的时候才需要定义。 |
namespace Home\Model; use Think\Model; class UserModel extends Model{ protected $trueTableName = 'myuser'; }
注意:一定要加上protected关键字
也可以使用D方法实例化
$User = D('User');// 相当于 $User = new \Home\Model\UserModel();
使用D方法可以自动从\Home\Model中寻找模型
实例化空模型
//实例化空模型 $Model = new Model(); //或者使用M快捷方法是等效的 $Model = M(); //进行原生的SQL查询,用于select语句 $data = $Model->query('SELECT * FROM myuser '); //进行update,insert,delete语句 $data = $Model->execute('delete from myuser where id = 1');
注意:如果在Linux环境下面,一定要注意D方法实例化的时候的模型名称的大小写。
增删改查
add
$data = array( 'name'=>'px', 'age'=>22 ); $result = D('user')->add($data); dump($result);
add方法返回参数是插入的数据的id
插入多条数据
$data = array( 0=> array( 'name'=>'px', 'age'=>22 ), 1=> array( 'name'=>'1x', 'age'=>25 ), 2=> array( 'name'=>'2x', 'age'=>23 ) ); $result = D('user')->addAll($data);
返回数据是插入的数据的第一条的id
注意:addAll方法只支持mysql数据库
select
例1:字符串用法$result = D('user')->where('id=4 or age = 6')->select();
例2:
$where['id'] = 4; $where['age'] = 6; $where['_logic'] = 'or';//_logic默认为and $result = D('user')->where($where)->select();//等同于select * from user where id=4 or age = 6;
例3:表达式查询
//表达式查询,支持eq,neq,lt,nlt,elt,gt,ngt,in,not in,between等 //$where['id'] = array('lt',6);//表示id<6 $where['id'] = array('between','4,6');//表示id在4-6之间 $result = D('user')->where($where)->select();
例4:模糊查询
//$where['name'] = array('like','%ja%'); $where['name'] = array('like',array('%ja%','%e%'));//两个like之间是使用or关联 $result = D('user')->where($where)->select();
例5:
$where['id'] = array(array('lt',5),array('gt',2)); $result = D('user')->where($where)->select();
例6:
$where['id'] = array(array('lt',5),array('gt',10),'or');
例7:(不推荐使用这种混合的方式)
$where['id'] = array('lt',6); $where['_string'] = ' age < 10'; $result = D('user')->where($where)->select();
例8:统计用法(count,sum,min,avg,等)
$result = D('user')->count(); //统计条数 $result = D('user')->max('id');//获取id最大值 $result = D('user')->avg('id');//获取平均值
update
$update['name'] = 'mike'; $where['id'] = 5; $result = D('user')->where($where)->save($update);
$update['name'] = 'mike'; $where['id'] = array('lt',6); $result = D('user')->where($where)->save($update);
delete
$where['id'] = 6; $result = D('user')->where($where)->delete();
或
$result = D('user')->delete(5);//直接传入主键
order排序
$result = D('user')->order('id desc')->select();//多个条件用逗号隔开
field字段选择
$result = D('user')->field('id,name')->select();//只查询id和name字段 $result = D('user')->field('id,name',true)->select();//true表示查询除了id和name以外的字段
limit
$result = D('user')->limit(3,4)->select();//从第三条开始,共查询4条数据
page分页
$result = D('user')->page(2,5)->select();//page(页码,每页条数),每页条数默认为20
group和having
$result = D('user')->field('age,count(*) as total')->group('age')->having('age>10')->select();
多表查询
table方法(不常用)
table(array(表名=>表别名))$result = M()->table(array('myuser'=>'user','user_info'=>'info'))->where('user.id=info.userId')->select();
注意:此处表名要写完整表名
join方法
$result = D('user')->join('user_info on user.id=user_info.userId')->select();
可以使用right join,left join等关键字配置关联的方式
$result = D('user')->join('left outer join user_info on myuser.id=user_info.userId')->select();
如果要关联多个表,可以多次使用join()方法
$result = D('user')->join('left outer join user_info on myuser.id=user_info.userId')->join('xxxxx')->select();
union查询
union(‘string|array’, true/false); 第二个参数是是否使用union all,默认为false$result = D('user')->union('select * from user2')->select();
注意:union查询的两个表之间必须字段一样
distinct
$result = D('user')->distinct(true)->field('age')->select();
命名范围
什么是命名范围?命名范围就是上述的一些数据库操作进行一些封装,方便调用,例如:
对UserModel进行一些封装
namespace Home\Model; use Think\Model; class UserModel extends Model{ protected $_scope = array( "scope1"=>array( 'where'=>array('id'=>array('gt',5)), 'field'=>'id,name' ), "scope2"=>array( 'field'=>'name,age' ), ); }
然后调用
$result = D('user')->scope('scope1')->select();
如果同时调用多个命名范围,使用逗号隔开
$result = D('user')->scope('scope1,scope2')->select();
如果多个命名范围中有冲突,那么后面的会覆盖前面的
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- kindeditor 批量上传 上传失败 thinkphp swfupload session
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- more、less 和 most 的区别
- 第三章 数据库备份和还原
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- AJAX实现瀑布流触发分页与分页触发瀑布流的方法
- Oracle 数据库自动存储管理-安装配置
- Oracle数据库执行脚本常用命令小结