## 数据库类型
* Sqlite3 适用于小型项目的开发,不需要安装,上传即可使用 (默认) 。
* Mysql 适用于中大型项目的开发,需要先删除(./datas/db/mysql.lock)锁定文件后在浏览器执行 **install.php**,照提示安装即可。
## 数据库配置
./apps/databse.php 为数据库配置文件,您也可以手动配置。
## 数据库结构
DaiCuo的数据表比较简单,理念是采用横向数据库的设计思路,熟悉WordPress的朋友应该不会陌生。
* dc_info 内容基础表
* dc_info_meta 内容扩展表
* dc_info_logo 日志记录表
* dc_op 配置基础表
* dc_term 队列基础表
* dc_term_map 队列关系表
* dc_term_meta 队列扩展表
* dc_user 用户基础表
* dc_user_meta 用户扩展表
## 数据表扩展
* 当在开发插件应用时需要增加额外的数据表时,请将Mysql或Sqlite3的建议表句放在 应用名/event/Sql.php 里面,对应的操作有“安装/更新/删除 ” ,当执行应用的“安装/升级/删除”时将执行对应的语句达到数据表的新建、修改、删除。
* 扩展数据表的实例:
```
//应用插件安装时执行的脚本
public function install()
{
\think\Db::execute("DROP TABLE IF EXISTS `dc_test`;");
\think\Db::execute("CREATE TABLE `dc_test` (
`test_id` BIGINT(20) PRIMARY KEY AUTO_INCREMENT NOT NULL,
`test_name` VARCHAR(150) NOT NULL,
`test_value` LONGTEXT NULL
)ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;");
}
```
## 字段扩展
* **自建表**根据应用开发时对数据库表字段的设计进行开发,对数据库的操作通过DaiCuo封装的助手函数或ThinkPhp提供的函数、模型来完成,详见TP5的[数据库](https://www.kancloud.cn/manual/thinkphp5/118058)章节。
* **系统扩展表**可通过扩展配置custom_fields来完成,具体方法为在(应用名/config.php下),使用 DcConfigMerge 函数对上述三个扩展表的字段进行合并,只有定义后的字段,DaiCuo框架在新增、查询、修改、删除数据时才会做对应的处理。
```
//扩展用户表字段
DcConfigMerge('custom_fields.user_meta', ['user_score','user_pid','wx_openid'] );
//扩展用户组
DcConfigMerge('user_roles.subscriber', ['home/user/index'] );
```
* **系统基础表、扩展表**还可以通过(网站后台 > 系统>字段管理 )进行可视化管理,通过这种方式扩展的字段的好处是对数据库操作可以直接调用呆错公共模型类对应的write方法自动判断新增与修改。实例如下:
```
model('common/Info','loglic')->write($post);
```
## Sqlite数据库配置示例
如果不需要使用env开发环境就不需要引入env类。
```
use think\Env;
return [
// 数据库类型
'type' => Env::get('database.type', 'sqlite'),
// 数据库名
'database' => Env::get('database.database', 'datas/db/#daicuo.s3db'),
// 连接dsn
'dsn' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => Env::get('database.charset', 'utf8'),
// 数据库表前缀
'prefix' => Env::get('database.prefix', 'dc_'),
// 数据库调试模式
'debug' => Env::get('database.debug', false),
// 数据集返回类型
'resultset_type' => 'collection',
// 自动写入时间戳字段
'auto_timestamp' => false,
// 时间字段取出后的默认时间格式
'datetime_format' => 'Y-m-d H:i:s',
// 是否需要进行SQL性能分析
'sql_explain' => false,
];
```
## Mysql数据库配置示例
如果不需要使用env开发环境就不需要引入env类。
```
use think\Env;
return [
// 数据库类型
'type' => Env::get('database.type', 'mysql'),
// 服务器地址
'hostname' => Env::get('database.hostname', '127.0.0.1'),
// 数据库名
'database' => Env::get('database.database', 'daicuo'),
// 用户名
'username' => Env::get('database.username', 'root'),
// 密码
'password' => Env::get('database.password', 'root'),
// 端口
'hostport' => Env::get('database.hostport', ''),
// 连接dsn
'dsn' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => Env::get('database.charset', 'utf8'),
// 数据库表前缀
'prefix' => Env::get('database.prefix', 'dc_'),
// 数据库调试模式
'debug' => Env::get('database.debug', false),
// 数据集返回类型
'resultset_type' => 'collection',
// 自动写入时间戳字段
'auto_timestamp' => false,
// 时间字段取出后的默认时间格式
'datetime_format' => 'Y-m-d H:i:s',
// 是否需要进行SQL性能分析
'sql_explain' => false,
];
```
## 助手函数
* dbSelect 数据查询多个
* dbFind定义 数据查询单个
* dbGetValue 根据条件快捷查询某个字段的值
* dbWriteAuto 写入多条数据自动判断新增与修改,当数据中存在主键的时候会认为是更新操作,否则为新增
* dbUpdateField 更新某个字段的值
* dbUpdateInc 自增某字段的值
* dbUpdateDec 自减某字段的值
* dbUpdateAll 批量更新数据(批量更新仅能根据主键值进行更新,其它情况请使用foreach遍历更新)
* dbUpdate 更新数据
* dbDelete 删除数据
* dbInsertAll 添加多条数据
* dbInsert 添加一条数据