ThinkPHP5 模型入门

首先开启调试

// 应用配制文件
// 开启应用调试模式
'app_debug'              => true,
// 开启应用
Trace'app_trace'         => true,    
'log' => [
    // 日志记录方式
    'type'  => 'File',
    // error和sql日志单独记录
    'apart_level'   =>  ['error','sql'],
],
// 数据库配制文件
'debug'       => true,

定义模型

主要目的:
定义数据表(默认类名)及主键(自动获取)
定义数据处理逻辑(包括属性和方法)及业务逻辑(方法)

namespace app\index\model;

use think\Model;

class User extends Model{
}

注意:
数据字段自动获取,支持缓存
模型不支持前缀

Model类名 表名
User think_user
UserType think_user_type

数据库符合命名规范,则不用定义 table 与name

// table 完整表名
protected $table = 'user_info';
// name 无前缀表名
protected $name = 'user_info';

开启应用类库后缀后,类名加model


'class_suffix'  => true,

namespace app\index\model;

use think\Model;

class UserModel extends Model{
}

调用

// 实例化User模型
$user = new \app\index\model\User();

// 直接静态查询
$user = \app\index\model\User::get(1);

// 助手函数调用
$user = model('User');

Db类 与 模型 的CURD

所有的链式方法都可以直接被模型类静态调用,而且一样不分先后次序

总结

用法 模型(动态)值 Db类 模型(静态)
创建 insert save create
更新 update save update
读单个 find find get
读多个 select select all
删除 delete delete destroy

Create

静态调用(个人倾向)

模型类的静态CURD操作其实都是内部自动实例化

$user = User::create([
    'name'  => 'thinkphp',
    'email' => '[email protected]',
]);
echo $user->id;
方法 返回值
save(动态) 影响的记录数
create(静态) 模型对象实例
//Db用法
Db::table('user')
    ->insert([
        'name'  => 'thinkphp',
        'email' => '[email protected]',
    ]);

// 模型用法
$user        = new User;
$user->name  = 'thinkphp';
$user->email = '[email protected]';
$user->save();

// 批量设置
$user = new User;
$user->save([
    'name'  => 'thinkphp',
    'email' => '[email protected]',
]);

Read

原则上模型的查询都应该是静态调用

方法 作用 返回值
get 查询单个记录 模型对象实例
find 查询单个记录 模型对象实例
all 根据主键查询多个记录 包含模型对象实例的数组或者数据集
select 根据条件查询多个记录 包含模型对象实例的数组或者数据集

$user = User::get(1);
echo $user->id;
echo $user->name;

// Db类,查询用户数据集
$users = Db::table('user')
->where('id', '>', 1)
->limit(5)
->select();

// 遍历读取用户数据
foreach ($users as $user) {
echo $user['id'];
echo $user['name'];
}

// 模型,查询用户数据集
$users = User::where('id', '>', 1)
->limit(5)
->select();

// 遍历读取用户数据
foreach ($users as $user) {
echo $user->id;
echo $user->name;
}

// 多主键
Db::table('user')->select([1,2,3]);
$users = User::all([1, 2, 3]);

Update

方法 作用 返回值
save 更新数据 影响的记录数
update 更新数据(静态) 返回模型对象实例
// Db实现
Db::table('user')
    ->where('id', 1)
    ->update([
        'name'  => 'topthink',
        'email' => '[email protected]',
    ]);

// 模型实现
$user        = User::get(1);
$user->name  = 'topthink';
$user->email = '[email protected]';
$user->save();

$user = User::get(1);
$user->save([
    'name'  => 'topthink',
    'email' => '[email protected]',
]);

User::update([
    'name'  => 'topthink',
    'email' => '[email protected]',
], ['id' => 1]);

数据集

通过判空

$resultSet = User::all();
if (0 == count($resultSet)) {
    echo '数据集为空';
}

在这里插入图片描述

分页

$total = User::where('status', 1)->count();
$list  = User::where('status', 1)
    ->paginate(20, $total);

业务

控制器调用模型,模型类封装“业务逻辑”和“数据处理”

// controller
public function register(){
     return $this->fetch();
}

public function doRegister(User $user){
    $data   = $this->request->param();
    $result = $user->register($data);
    if ($result) {
        $this->success('用户注册成功');
    } else {
        $this->error($user->getError());
    }
}

// model (好优雅,有没有)
/**
* 注册一个新用户
* @param  array $data 用户注册信息
* @return integer|bool  注册成功返回主键,注册失败-返回false
*/
public function register($data = []){
   $result = $this->validate(true)->allowField(true)->save($data);
   if ($result) {
       return $this->getData('id');
   } else {
       return false;
   }
}
    
  • 依赖注入直接把模型对象实例注入到控制器的操作方法中,而不需要每次都进行实例化。
    // 关于如何使用依赖注入,请参考《控制器从入门到精通》第五讲
发布了37 篇原创文章 · 获赞 1 · 访问量 765

猜你喜欢

转载自blog.csdn.net/yuhezheg/article/details/103415834