thinkphp 定义模型 设置模型 添加数据 更新数据 配置获取器 设置获取器 php think optimize:schema

定义/设置 模型

定义一个和数据库表对应的模型文件
在app文件夹下新建model文件夹,在创建php类,取名要和表名,如表名为tp_user模型取名为User,表名为tp_user_name模型取名为UserName

--php

namespace app\model;

use think\Model;

// 字段设置
// 模型的数据字段和数据库表字段是对应关系 默认会自动获取 包括字段的类型
// 但是自动获取会导致增加一次查询 在模型组设置字段信息 可以减少内存开销
// protected $schema = [
//     'id'          => 'int',
//     'name'        => 'string',
//     'age'         => 'int',
//     'details'     => 'string',
// ]
// 但是设置的字段 只对模型有效 对DB::name()无效 所以一般不单独设置字段 而是开启缓存
// 在config/database.php中开启缓存字段 fields_cache => true 然后再根目录 执行命令行 php think optimize:schema, 会生成一个runtime/cache

//                如果开启了缓存 每次新增字段 都要执行 php think optimize:schema 更新缓存!!!!!

// 废弃字段 由于某些原因 表里的某些字段不想再使用了 可以在模型里设置
// 如不想使用 details字段
// protected $disuse = ['details'];

// 设置只读字段
// protected $readonly = ['name'];
class User extends Model
{
     // 初始化模型的一些操作
    public static function init()
    {
        // echo 'init2222';
    }
    protected $disuse = ['details'];
    // protected $readonly = ['name'];

    // 配置获取器 在别的页面(控制器使用的时候会默认加上这个函数的行为) 
    // getStatusAttr get + 字段名(首字母大写 可以是任何字段) + Attr
    public function getStatusAttr($value, $data)
    {
        // $data 所有的数据 var_dump($data);
        $status = [0 => '禁用', 1 => '启用', 2 => '待审核', 10 => '已删除'];
        return $status[$value];
    }

    // 配置获取器  在别的页面(控制器使用的时候会默认加上这个函数的行为) 
    // setStatusAttr  set + 字段名(首字母大写 可以是任何字段) + Attr
    public function setStatusAttr($value, $data)
    {
        // $data 所有的数据 var_dump($data);
        return $value + 1;
    }

}



在控制器里使用

use app\model\User;

class Login extends  BaseController
{
    public function index()
    {
        $user = User::select();
        return $user;
    }
}

添加数据

    public function add()
    {
        $user = new User();
        $user->name = 'thinkphp11111';
        $user->age = 11;
        $user->details = '23232323232';
        $user->sex = '女';

        $user->save();
    }

更新数据

 public function update()
    {
        // 根据主键查找
        // $user = User::find(1);

        // 条件查找
        // $user = User::where('id', 1)->find();
        // $user->name = 'thinkphp1';

        // save只会更新有变化的数据,如果没有变化的数据,不会更新
        // 如果想强制更新数据, 可以用force()方法
        // echo $user->force()->save();

        // 使用Db::raw() 执行sql函数
        // $user = User::find(1);
        // $user->age = Db::raw('age  + 2');
        // $user->save();

        // 批量修改 不会新增 只会主键修改存在的数据
        // saveAll() 返回被修改的数据集合
        // $user = new User();
        // return $user->saveAll([
        //     ['id' => 1, 'name' => 'thinkphp1'],
        //     ['id' => 2, 'name' => 'thinkphp2'],
        //     ['id' => 3, 'name' => 'thinkphp3'],
        //  ]);

        // User::update()
        $user = new User();
        // return $user->update([ 'id' => 1, 'name' => 'thinkphp3' ]);
        // id放后面 返回数据不包含id
        // return $user->update(["name" => 'thi3333'], ["id" => 1]);
        // 限制更新的内容 只允许details被修改
         return $user->update(["details" => '男', 'age' => 32], ["id" => 1], ['details']);
    }

查询数据

 
    public function select()
    {
        // 查询单个数据
        // $user = User::find(1);
        // return json($user);

        // 查询全部
        // $user = User::select();
        // 查询多个数据
        // $user = User::select([1, 2, 3]);
        // 条件查询
        // $user = User::where('id', 1)->select();
        // $user = User::where('id', '<', 2)->select();
        // 筛选3条
        // $user = User::limit(4)->select();
        // 按照排序返回 desc 降序 asc 升序
        // $user = User::order('age', 'desc')->select();
        // 先按照 age 字段排列,如果遇到 age 相同的情况,则按照 id 字段排列。
         $user = User::order(['age' => 'asc', 'id' => 'desc'])->select();
         return json($user);
    }

posted on 2024-01-18 03:00  完美前端  阅读(48)  评论(0编辑  收藏  举报

导航