博客列表 >数据库与模型(数据库的连接 数据库的CURD操作 查询构造器 模型的操作)2019年3月21日

数据库与模型(数据库的连接 数据库的CURD操作 查询构造器 模型的操作)2019年3月21日

小明的博客
小明的博客原创
2019年10月16日 18:21:51852浏览

一、数据库的连接

  • 静态连接   

  • 动态连接

  • 环境变量

  • 模型连接

实例

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);
    }
}

运行实例 »

点击 "运行实例" 按钮查看在线实例


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议