Blogger Information
Blog 42
fans 2
comment 0
visits 53968
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
数据库与模型(数据库的连接 数据库的CURD操作 查询构造器 模型的操作)2019年3月21日
小明的博客
Original
851 people have browsed it

一、数据库的连接

  • 静态连接   

  • 动态连接

  • 环境变量

  • 模型连接

实例

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

运行实例 »

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


Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments