美文网首页PHP
【TP5-05】模型

【TP5-05】模型

作者: Geeks_Chen | 来源:发表于2017-09-26 14:39 被阅读840次

    1、tp5的模型是一种对象-关系映射(ORM)的封装,并且提供了简洁的ActiveRecord 实现。一般来说,每个数据表会和一个‘模型’对应。

    2、ORM的基本特性就是表映射到模型,记录映射到模型对象实例,字段映射到对象属性。模型是一种对象化的操作封装,而不是简单的CURD操作,简单的CURD操作直接使用Db类就可以实现。

    3、模型类的Db类的区别主要在于对象业务逻辑的封装,Db类的查询默认返回的是数组(或者集合),而模型类返回的是当前的模型对象实例(集合),模型是比Db 类更高级的数据封装,支持模型关联、模型事件和业务逻辑方法。

    4、模型定义

    4.1、创建一个think_user表

    CREATE TABLE IF NOT EXISTS `think_user`(
        `id` int(8) unsigned NOT NULL AUTO_INCREMENT,
        `nickname` varchar(50) NOT NULL COMMENT '昵称',
        `email` varchar(255) NULL DEFAULT NULL COMMENT '邮箱',
        `birthday` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '生日',
        `status` tinyint(2) NOT NULL DEFAULT '0' COMMENT '状态',
        `create_time` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '注册时间',    
        `update_time` int(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '更新时间',    
        PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;
    

    4.2、创建一个模型 User模型(application/index/model/User.php)

    namespace app\index\model;
    
    use think\Model;
    
    class User extends Model
    {
    }
    

    4.3、设置数据表
    模型会自动对应一个数据表:数据表前缀+当前的模型类名(不含命名空间)

    namespace app\index\model;
    
    use think\Model;
    
    class User extends Model
    {
        //第一种 设置完整的数据表(包含前缀)
        protected $table = 'think_user';
      
        // 第二种 设置数据表(不含前缀)
        protected $name = 'member';
      
      // 设置单独的数据库连接
        protected $connection = [
            // 数据库类型
            'type'        => 'mysql',
            // 服务器地址
            'hostname'    => '127.0.0.1',
            // 数据库名
            'database'    => 'test',
            // 数据库用户名
            'username'    => 'root',
            // 数据库密码
            'password'    => '',
            // 数据库连接端口
            'hostport'    => '',
            // 数据库连接参数
            'params'      => [],
            // 数据库编码默认采用utf8
            'charset'     => 'utf8',
            // 数据库表前缀
            'prefix'      => 'think_',
            // 数据库调试模式
            'debug'       => true,
        ];
    }
    

    说明:一般来说应用的模型都是公用的,不区分模块,所以不必在每个模块下面定义模型。

    5、基础操作
    5.1、新增数据

    <?php
    namespace app\index\controller;
    
    use app\index\model\User as UserModel;
    
    class User
    {
        // 新增用户数据
        public function add()
        {
            $user           = new UserModel;
            $user->nickname = '流年';
            $user->email    = 'thinkphp@qq.com';
            $user->birthday = strtotime('1977-03-05');
            if ($user->save()) {
                return '用户[ ' . $user->nickname . ':' . $user->id . ' ]新增成功';
            } else {
                return $user->getError();
            }
        }
    }
    

    // 新增用户数据
    public function add()
    {
      $user['nickname'] = '看云';
      $user['email']    = 'kancloud@qq.com';
      $user['birthday'] = strtotime('2015-04-02');
      if ($result = UserModel::create($user)) {
          return '用户[ ' . $result->nickname . ':' . $result->id . ' ]新增成功';
      } else {
          return '新增出错';
      }
    }  
    

    5.2、批量新增

    // 批量新增用户数据
    public function addList()
    {
        $user = new UserModel;
        $list = [
            ['nickname' => '张三', 'email' => 'zhanghsan@qq.com', 'birthday' => strtotime('1988-01-15')],
            ['nickname' => '李四', 'email' => 'lisi@qq.com', 'birthday' => strtotime('1990-09-19')],
        ];
        if ($user->saveAll($list)) {
            return '用户批量新增成功';
        } else {
            return $user->getError();
        }
    }
    

    5.3、查询数据

    // 根据id读取用户数据
    public function read($id='')
    {
        $user = UserModel::get($id);
        echo $user->nickname . '<br/>';
        echo $user->email . '<br/>';
        echo date('Y/m/d', $user->birthday) . '<br/>';
    }
    // 根据nickname读取用户数据
    public function read()
    {
        $user = UserModel::get(['nickname'=>'流年']);
        echo $user->nickname . '<br/>';
        echo $user->email . '<br/>';
        echo date('Y/m/d', $user->birthday) . '<br/>';
    }
    // 根据nickname通过闭包读取用户数据
    public function read()
    {
        $user = UserModel::get(function($query){
            $query->where('nickname', '流年')->where('id', '>', 10)->order('id','desc');
        });
        echo $user->nickname . '<br/>';
        echo $user->email . '<br/>';
        echo date('Y/m/d', $user->birthday) . '<br/>';
    }
    

    5.4、数据列表

    // 获取用户数据列表
    public function index()
    {
        $list = UserModel::all();
        foreach ($list as $user) {
            echo $user->nickname . '<br/>';
            echo $user->email . '<br/>';
            echo date('Y/m/d', $user->birthday) . '<br/>';
            echo '----------------------------------<br/>';
        }
    }
    

    5.5、更新数据

    // 更新用户数据
    public function update($id)
    {
        $user           = UserModel::get($id);
        $user->nickname = '刘晨';
        $user->email    = 'liu21st@gmail.com';
        $user->save();
        return '更新用户成功';
    }
    // 高效更新用户数据
    public function update($id)
    {
        $user['id']       = (int) $id;
        $user['nickname'] = '刘晨';
        $user['email']    = 'liu21st@gmail.com';
        UserModel::update($user);
        return '更新用户成功';
    }
    

    5.6、删除数据

    // 删除用户数据
    public function delete($id)
    {
        $user = UserModel::get($id);
        if ($user) {
            $user->delete();
            return '删除用户成功';
        } else {
            return '删除的用户不存在';
        }
    }
    // 删除用户数据
    public function delete($id)
    {
        $result = UserModel::destroy($id);
        if ($result) {
            return '删除用户成功';
        } else {
            return '删除的用户不存在';
        }
    }
    

    相关文章

      网友评论

        本文标题:【TP5-05】模型

        本文链接:https://www.haomeiwen.com/subject/cvxosxtx.html