tp5.1的数据库连接
数据库的连接方法——
使用静态连接的方法,通过修改配置目录下的database.php文件实现对数据库的连接(可以直接修改也可以使用ENV环境变量实现进行配置)
以下是配置文件——
Env::get('database_type'),// 服务器地址'hostname' => Env::get('database_hostname'),// 数据库名'database' => Env::get('database_database'),// 用户名'username' => Env::get('database_username'),// 密码'password' => Env::get('database_password'),// 端口'hostport' => '',// 连接dsn'dsn' => '',// 数据库连接参数'params' => [],// 数据库编码默认采用utf8'charset' => Env::get('database_charset'),// 数据库表前缀'prefix' => '',// 数据库调试模式'debug' => Env::get('database_debug'),// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)'deploy' => 0,// 数据库读写是否分离 主从式有效'rw_separate' => false,// 读写分离后 主服务器数量'master_num' => 1,// 指定从服务器序号'slave_no' => '',// 自动读取主库数据'read_master' => false,// 是否严格检查字段是否存在'fields_strict' => true,// 数据集返回类型'resultset_type' => 'array',// 自动写入时间戳字段'auto_timestamp' => false,// 时间字段取出后的默认时间格式'datetime_format' => 'Y-m-d H:i:s',// 是否需要进行SQL性能分析'sql_explain' => false,// Builder类'builder' => '',// Query类'query' => '\\think\\db\\Query',// 是否需要断线重连'break_reconnect' => false,// 断线标识字符串'break_match_str' => [],//自定义连接配置'my_db' => [//数据库类型'type' => 'mysql',//服务器地址'hostname' => '127.0.0.1',//数据库名'database' => 'tp51',//用户名'username' => 'root',//密码'password' => 'root',]
];
以下是.env文件中的代码
;应用参数
app_debug = true//开启框架操作时代码运行错误时的错误提示
app_trace = true//开启tp框架自带的控制台
;数据库的配置信息
database_type = mysql
database_hostname = 127.0.0.1
database_database = tp51
database_username = root
database_password = root
database_charset = utf8
database_debug = true
在静态连接成功后通过Db类中的静态方法对数据库中的数据表进行操作
$res = Db::table('staff')->limit(1)->select();
也可以使用动态连接的方法连接数据库
//使用connect方法动态连接
$res = Db::connect('my_db')->table('staff')->limit(2)->select();
其中的my_db是自定义的连接配置(在database.php中定义)'my_db' => [//数据库类型'type' => 'mysql',//服务器地址'hostname' => '127.0.0.1',//数据库名'database' => 'tp51',//用户名'username' => 'root',//密码'password' => 'root',]
还有一种是使用模型连接
use think\Model;class Staff extends Model
{protected $table = 'staff';//所用的数据表,默认是与模型名称同名的数据表protected $pk = 'id';//所用的数据表的主键//配置连接参数protected $connection = 'my_db';
控制器中的代码
$res = Staff::limit(4)->select();//可以直接对该模型进行操作
对数据库进行curb操作
数据库的原生查询
——主要思路:先构造一个sql语句,其中的参数使用:加变量名作为数据占位符,然后调用Db类中的query或者execute方法执行sql语句
//数据库的原生查询:query()
public function demo2()
{//准备sql语句$sql = 'SELECT `id`,`name`,`age` FROM `staff` WHERE `age`>:age LIMIT :num';//执行查询操作$res = Db::query($sql, ['age' => 50, 'num' => 2]);dump($res);
}//数据库的原生写操作:execute()
public function demo3()
{//准备sql语句$sql = 'UPDATE `staff` SET `salary` = :salary WHERE `id` = :id';//执行写操作$res = Db::execute($sql, ['salary' => 5000, 'id' => 3]);dump($res);
}
使用查询构造器进行数据库操作
主要思路:使用Db类中自带的数据库操作方法进行数据库的链式操作
find():返回满足条件的第一条记录
vlaue():获取记录中某一个字段中的第一个值
select():返回满足条件的所有记录
colum():返回一个列的值,可以定义查询的列和查询后所得数组的键值
insert():新增的操作,执行新增的操作,成功会返回新增的数量
update():更新的操作
fetchsql():获取当前执行的sql语句的方法
//查询构造器:find()/select()public function demo4(){//find():返回满足条件的第一条记录$res = Db::table('staff')->field('id,name,age')->find();//获取记录中某一个字段中的第一个值:value()$res = Db::table('staff')->field('id,name,age')->where('age', '>', 70)->value('name');//select():返回满足条件的所有记录$res = Db::table('staff')->field('id,name,age')->where('age', '>', 70)->select();//colum():返回一个列的值$res = Db::table('staff')->field('id,name,age')->where('age', '>', 70)->column('age', 'name');//colum可以定义查询的列和查询后所得数组的键值dump($res);}//查询构造器中的新增操作:insert()public function demo5(){$data = ['name' => '欧阳锋','sex' => 1,'age' => 59,'salary' => 8868.58,'email' => 'ouyangfeng@php.cn','mobile' => '15788997652','password' => sha1('123456'),'create_time' => time(),'update_time' => time(),'delete_time' => 0,];//执行新增的操作,成功会返回新增的数量$res = Db::table('staff')->data($data)->insert();dump($res);}//查询构造器:update()public function demo6(){//更新条件$where['id'] = 21;//更新内容$data['age'] = 59;$res = Db::table('staff')->where($where)->data($data)//->fetchSql()//获取当前执行的sql语句的方法->update();dump($res);}//查询构造器:如何准确的获取查询结果public function demo7(){
// 1.字符串$res = Db::table('staff')->field('id,name,age,salary')->where('age > 50')->where('salary BETWEEN 5000 AND 8000')->select();// 2.表达式$res = Db::table('staff')->field('id,name,age,salary')->where('age', '>', 50)->where('salary', 'between', '5000,8000')//也可以写作[5000,8000]->select();// 3.数组$where[] = ['age', '>', 50];$where[] = ['salary', 'between', '5000,8000'];$res = Db::table('staff')->field('id,name,age,salary')->where($where)->select();// 如果是等值查询$where = [];$where['id'] = 5;$res = Db::table('staff')->where($where)->find();dump($res);}
模型查询的curb操作
tp框架中的model类继承了Db类中的方法
常用到的模型类中的方法
get()——返回满足条件的第一条数据,get方法中的参数可以是一个值,也可以是一个闭包函数,其效果与使用查询构造器中的find()方法类似
all()——返回满足条件的所有记录,其效果与使用查询构造器中的select()方法类似
update()——更新操作
create()——新增操作
destory()——删除操作
//模型查询的读操作public function demo8(){
// 1.get()返回满足条件的第一条记录
// 1.1.主键$res = Staff::get(9);// 1.2查询构造器$res = Staff::field('id,name,age')->where('age', '>', 90)->find();// 闭包$res = Staff::get(function (Query $query) {$query->field('id,name,age')->where('age', '>', 80);});// 2.all()——获取满足条件的多条记录
// 2.1 all()$res = Staff::all();
// 2.2 all([])$res = Staff::all([2, 4, 6]);
// 2.3查询构造器$res = Staff::field('id,name,age')->where('age', '>', 90)->select();dump($res);}//模型的新增操作public function demo9(){//准备要添加到表中的数据,以数组的方式提供$data = ['name' => '沙通天','sex' => 1,'age' => 39,'salary' => 2233.58,'email' => 'shatongtian@php.cn','mobile' => '157112347652','password' => sha1('123456'),'creat_name' => time(),'update_name' => time(),'delete_time' => 0,];//createdump(Staff::create($data));}//模型的更新与删除public function demo10(){//id = 22,age//update(更新的字段,更新条件)$createtime = time();$res = Staff::update(['create_time' => $createtime], ['id' => 22]);$res = Staff::destroy(['id' => 25]);dump($res);}
模型的获取器与修改器
获取器——作用是对模型实例的数据做出自动处理。命名规则get+字段名+Attr,字段名需要使用驼峰命名法
//获取器:命名规则get+字段名+Attr,字段名需要使用驼峰命名法
//性别,getSexAttr固定命名,需要使用驼峰命名法
protected function getSexAttr($value)
{return $value ? '男' : '女';
}
//获取器:创建时间
protected function getCreateTimeAttr($value)
{return date('Y/m/d', $value);
}//获取器的第三个参数:代表着当前记录的全部内容
protected function getEmailAttr($value, $data)
{return $data['name'] . '的邮箱是:' . $value;
}//第二个参数的应用,可以伪装不存在的字段
protected function getInfoAttr($value, $data)
{return $data['name'] . '的工资是' . $data['salary'];
}
对应的控制器代码——
//获取器的测试
public function demo11()
{$res = Staff::get(2);dump($res);$res = $res->info;//获取器的第二个参数的应用dump($res);
}
修改器——对模型设置的数据对象值进行处理(),命名规则与获取器类似
修改器的使用场景和读取器类似:
时间日期字段的转换写入;
集合或枚举类型的写入;
数字状态字段的写入;
某个字段涉及其它字段的条件或者组合写入
//修改器,设置器,针对时间
//命名规则set+字段名+Attr,字段名需要使用驼峰命名法
protected function setCreateTimeAttr($value)
{return strtotime($value);//通过修改器实现对用户提供的时间的字符串变为时间戳,strtotime函数实现时间戳的转化
}
控制器代码
//修改器,设置器的测试
public function demo12()
{$res = Staff::get(1);$res->create_time = '2019-3-27';$res->save();//save的方法类似于update方法区别在于save方法有对象调用,是动态方法dump($res);
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
