一、数据库的连接
静态连接
动态连接
环境变量
模型连接
实例
public function demo1() { //静态测试 $res = Db::table('staff')->limit(1)->select(); //动态测试 $res = Db::connect('my_db')->table('staff')->limit(2)->select(); //环境变量 $res = Db::table('staff')->limit(3)->select(); //模型连接 $res = Staff::limit(4)->select(); dump($res); } //环境变量 database设置 // 数据库类型 'type' => Env::get('database_type'), // 服务器地址 'hostname' => Env::get('database_hostname'), // 数据库名 'database' => Env::get('database_database'), // 用户名 'username' => Env::get('database_username'), // 密码 'password' => Env::get('database_password'), //动态连接 在database设置自定义连接 'my_db' => [ // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' => 'localhost', // 数据库名 'database' => 'tp51', // 用户名 'username' => 'root', // 密码 'password' => 'root' ]
运行实例 »
点击 "运行实例" 按钮查看在线实例
二、数据库操作
原生查询读写操作
实例
//原生查询值之读操作 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); } //原生查询之写操作 public function demo3() { //这里以更新为例 $sql = "UPDATE `staff` SET `salary` = :salary WHERE `id` = :id"; //执行更新操作 这里用execute $res = Db::execute($sql, ['salary'=>9000, 'id'=>2]); dump($res); }
运行实例 »
点击 "运行实例" 按钮查看在线实例
查询构造器
实例
//查询构造器 find/select public function demo4() { //find查询符合条件的第一条记录 $res = Db::table('staff') ->field('id,name,age') ->where('age','>', 70) ->find(); //如果想过记录中某一字段的值用value() $res = Db::table('staff') ->where('age','>', 70) ->value('name'); //select返回满足条件的所有记录 $res = Db::table('staff') ->field('id,name,age') ->where('age','>', 70) ->select(); //如果只想获取某一列的值 用column 可以自定义键 默认为索引 $res = Db::table('staff') ->field('id,name,age') ->where('age','>', 70) ->column('age', 'name'); //打印 dump($res); } public function demo5() { //查询构造器 insert()新增操作 $data = [ 'name' => '欧阳峰', 'sex' => 1, 'age' => 59, 'salary' => 8866.58, 'email' => 'ouyangfeng@php.cn', 'mobile' => 15709883412, 'password' => sha1('123456'), 'create_time' => time(), 'update_time' => time(), 'delete_time' => 0 ]; $res = Db::table('staff')->data($data)->insert(); // $res = Db::table('staff')->insert($data); dump($res); //如果有多组数据那么用insertAll() } //查询构造器 update操作 //查询构造是给予查询操作的 public function demo6() { /*$where = ['id'=>22]; $data = ['age'=>99];*/ $where['id'] = 22; $data['age'] = 99; $res = Db::table('staff')->where($where)->data($data)->fetchSql(false)->update(); dump($res); } //删除操作 public function demo06() { $where['id'] = [22, 23]; // $where['id'] = 23; /*$res = Db::table('staff')->where($where)->fetchSql(false)->delete(); dump($res);*/ }
运行实例 »
点击 "运行实例" 按钮查看在线实例
查询表达式
- 三、模型操作
实例
//查询表达式 public function demo7() { //whereOr() 条件或操作 //where()默认是与操作 //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]) ->select(); //3 数组 $where[] = ['age', '>', 50]; $where[] = ['salary', 'between', '5000, 8000']; $res = Db::table('staff') ->field('id, name, age, salary') ->where($where) ->select(); //如果是简单的等值查询可以简化数组 //$where 初始化条件 $where = []; $where['id'] = 5; $res = Db::table('staff') ->field('id, name') ->where($where) ->find(); dump($res); }
运行实例 »点击 "运行实例" 按钮查看在线实例
模型的建立 可以创建在应用目录或者模块目录中,模型通常与一张数据表对应,是数据表的抽象表现,模型的名称应该与数据库表的名称对应实现自动加载,也可以手动设置,模型应该继承框架的模型基类
模型的CURD操作
实例
//模型查询读操作 public function demo8() { //1.获取满足条件的第一条记录 // 1.1 get()从主键获取 $res = Staff::get(9); //1.2查询构造器 $res = Staff::field('id, age, name') ->where('age', '>', 70) ->find(); //1.3闭包 //Query类 开头引入了 $query是连接对象 $res = Staff::get(function (Query $query) { $query->field('id, name, age') ->where('age', '>', 70); }); //2 all()获取满足条件的所有记录 //2.1获取全部 $res = Staff::all(); //2.2获取指定主键 // $res = Staff::all('2, 3, 6'); $res = Staff::all([2,3,6]); //2.3查询构造器 $res = Staff::field('id, name, age') ->where('age', '>', 70) ->select(); //2.4闭包 $res = Staff::all(function (Query $query) { $query->field('id, name, age') ->where('age', '>', 70); }); dump($res); } //模型操作之新增操作 public function demo9() { $data = [ 'name' => '沙通天', 'sex' => 1, 'age' => 39, 'salary' => 4533.58, 'email' => 'shatongtian@php.cn', 'mobile' => 15712383412, 'password' => sha1('123456'), 'create_time' => time(), 'update_time' => time(), 'delete_time' => 0, ]; //静态方法新增create() $res = Staff::create($data); dump($res); } //模型操作之更新删除 public function demo10() { //更新id为22的记录的age为99 $res = Staff::update(['age'=>99],['id'=>22]); //删除id为22的记录 $res = Staff::destroy(['id'=>22]); dump($res); }
运行实例 »
点击 "运行实例" 按钮查看在线实例
获取器 设置器
实例
//获取器 修改器 需要现在模型中添加操作 public function demo11() { $res = Staff::get(1); //调用获取器创建的新字段info 获取器返回的是对象 $res = $res->info; dump($res); } //模块设置器测试 以创建事件为例 public function demo12() { //在做设置器时 首先要做查询操作 要设置那个记录的什么字段 $res = Staff::get(1); //设置自定义的创建时间 $res->create_time = '2019-03-28'; $res->save(); dump($res); } //在模型中要建立相应的获取器和设置器 也就是方法 方法名为获取器get字段名Attr 设置器set字段名Attr //要用大驼峰写法 里面的参数$value是获取的字段值或者为设置的字段值 第二个参数可以获取当前记录的所有数据 class Staff extends Model { //配置数据库连接参数 protected $connection = 'my_db'; //获取器 设置性别 protected function getSexAttr($value) { return $value ? '男' : '女'; } //获取器创建时间 protected function getCreateTimeAttr($value) { return date('Y-m-d H:i:s', $value); } //获取器支持第二个参数 用来获取该记录的其他数据 protected function getEmailAttr($value, $data) { return $data['name'] . '的邮箱是' . $value; } //第二个参数 可以创建一个不存在的字段info 提供给控制器里的操作来用 //第二个参数带来极大便利 想购物网站里的收货地址就可以动态生成 protected function getInfoAttr($value, $data) { return $data['name'] . '的年龄是' . $data['age'] . '工资是' . $data['salary']; } //设置设置器 他是同获取器相配套的 这里设置创建时间 protected function setCreateTimeAttr($value) { return strtotime($value); } }
运行实例 »
点击 "运行实例" 按钮查看在线实例