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 '删除的用户不存在';
}
}
网友评论