ThinkPHP(7)——数据库操作

原创 2016年05月31日 15:27:25

连接数据库

在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支持数据库的读写分离,如果要开启:

  1. DB_RW_SEPARATE设为TRUE
  2. DB_HOST多个数据库使用逗号隔开,主服务器要排在前面
  3. DB_MASTER_NUM配置主服务器的数量

实例化模型

实例化基础模型

现有一张表user,可以使用new Model或M方法来实例化模型,并查询数据

$user = new Model('user');//参数为表名
//$user = M('user');
$data = $user->select();
dump($data);

实例化自定义模型

也可以自定义一个UserModel

namespace 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,innot 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();

如果多个命名范围中有冲突,那么后面的会覆盖前面的

版权声明:本文为博主原创文章,未经博主允许不得转载。

学习thinkPHP 笔记(1)————————数据库操作 自写函数getbaseWhere() 和 where等操作

以WorkerModel 里面的函数getAllNormlaWorker()作为例子讲解 /**      * 查找所有正常状态的工号      * @return array 工号列表   ...

wp7——sqlite数据库操作

wp7的数据库是个头痛的问题,因为它目前不支持数据库,当然,你也可以使用微软的收费数据库或者云端,或者独立存储,不过综合下,如果你要设计一个数据管理类软件,数据库是必不可少的,下面我介绍一下Sqlit...

ThinkPHP中数据库操作返回值总结

文章转自:http://www.baiwar.com/post/thinkphp-database-operations-in-the-return-value.html Thinkphp中的T...
  • MrZZhou
  • MrZZhou
  • 2017年03月05日 19:05
  • 533

ThinkPHP3.1新特性:多数据库操作…

正常情况下,如果应用只是操作同一个数据库(或者分布式数据库)的话,你只需要在项目配置文件中定义数据库连接信息即可。这里说的多数据库操作一般指的是在一个应用中会操作不同的数据库(包括同类型的和不同类型的...

ThinkPHP学习笔记(3) 数据库操作以及M函数初探

ThinkPHP将网站分为MVC模式,那么对数据库的操作必然是重点之一。即M(Modle)。 ThinkPHP连接数据库 TP连接数据库很简单,只需要在配置文件中配置必要信息即可。 这里...

thinkphp5.x之数据库操作相关解析 Db类

风.foxdb函数本函数没什么好说,直接PASS/** * 实例化数据库类 * @param string $name 操作的数据表名称(不含前缀) * @...
  • wljk506
  • wljk506
  • 2016年10月03日 17:49
  • 5640

thinkphp对数据库操作有哪些内置函数

8.4.4 Model类 getModelName() 获取当前Model的名称 getTableName() 获取当前Model的数据表名称 switchModel(type,vars=arr...
  • chenlix
  • chenlix
  • 2013年11月23日 10:14
  • 1641

ThinkPHP5数据库操作

ThinkPHP5-数据库操作 一、数据库配置 1、在应用目录或者模块目录下面的database.php中添加下面的配置参数:return [ // 数据库类型 'type' ...

ThinkPHP-图片附件上传至指定目录并地址插入数据库操作

ThinkPHP-图片附件上传至指定目录并地址插入数据库操作

thinkphp5数据库操作方法小结

一.TP5数据库操作方法     1.name()方法         作用 : 指定默认的数据表名(不含前缀)         示例 : Db::name('weiba_post');...
  • Lovehmm
  • Lovehmm
  • 2016年12月27日 09:23
  • 7831
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ThinkPHP(7)——数据库操作
举报原因:
原因补充:

(最多只允许输入30个字)