PHP

【TP5-05】模型

2017-09-26  本文已影响840人  Geeks_Chen

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 '删除的用户不存在';
    }
}
上一篇下一篇

猜你喜欢

热点阅读