数据库/模型

## 数据库使用 > ORM使用ThinkORM是基于PHP7.1+和PDO的ORM库。 具体使用文档请前往:[Thinkorm 文档](https://www.kancloud.cn/manual/think-orm/1257998) ---- ### 配置数据库 > 根目录下的 “config/database.php” 文件中修改 ```php 'default' => 'mysql', // 数据库连接信息 'connections' => [ 'mysql' => [ // 数据库类型 'type' => 'mysql', // 主机地址 'hostname' => '127.0.0.1', // 用户名 'username' => 'root', // 数据库名 'password' => 'root', 'database' => 'demo', // 数据库编码默认采用utf8 'charset' => 'utf8', // 数据库表前缀 'prefix' => '', // 数据库调试模式 'debug' => true, ], ], ``` ### 基本使用 ------------ #### 查询单个数据 // table方法必须指定完整的数据表名 ```php Db::table('think_user')->where('id', 1)->find(); ``` // 如果设置了数据表前缀(prefix)参数的话 也可以使用 ```php Db::name('user')->where('id', 1)->find(); ``` 即使满足条件的数据有多个,find查询也只会返回一条数据。你可以使用order排序来决定返回某一条数据。 最终生成的SQL语句可能是(本手册中的示例如未说明均以MySql作为示例): ```php SELECT * FROM `think_user` WHERE `id` = 1 LIMIT 1 ``` find方法查询结果不存在,返回 null,否则返回结果数组 如果希望查询数据不存在的时候返回空数组,可以使用 // table方法必须指定完整的数据表名 ```php Db::table('think_user')->where('id', 1)->findOrEmpty(); ``` 如果希望在没有找到数据后抛出异常可以使用 ```php Db::table('think_user')->where('id', 1)->findOrFail(); ``` ------------ ## 模型使用 > 模型是使用ThinkORM中的Model 库 #### 定义一个模型 此时路径为:`ROOT/app/HOME/model` ```php namespace app\home\model; use core\Model; if(!defined('QZPHP_VER')) {exit('error!');} class User extends Model { public function getuser($id){ $info = $this->where('id',1)->find(); return $info->toArray(); } } ``` 模型会自动对应数据表,模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,例如: | 模型名|约定对应数据表(假设数据库的前缀定义是 qz_)| | -|-| |User|qz_user| |UserType|qz_user_type| > #### **模型自动对应的数据表名称都是遵循小写+下划线规范,如果你的表名有大写的情况,必须通过设置模型的table属性。** 设置模型主键 ```php class User extends Model { protected $pk = 'uid'; } ``` 如果你想指定数据表甚至数据库连接的话,可以使用: ```php class User extends Model { // 设置当前模型对应的完整数据表名称 protected $table = 'think_user'; // 设置当前模型的数据库连接 protected $connection = 'db_config'; } ``` #### 字段定义 模型的数据字段和对应数据表的字段是对应的,默认会自动获取(包括字段类型),但自动获取会导致增加一次查询,因此你可以在模型中明确定义字段信息避免多一次查询的开销。 ```php class User extends Model { // 设置字段信息 protected $schema = [ 'id' => 'int', 'name' => 'string', 'status' => 'int', 'score' => 'float', 'create_time' => 'datetime', 'update_time' => 'datetime', ]; } ```