config/database.php
return [
// 默认使用的数据库连接配置
'default' => env('database.driver', 'mysql'),
// 自定义时间查询规则
'time_query_rule' => [],
// 自动写入时间戳字段
// true为自动识别类型 false关闭
// 字符串则明确指定时间字段类型 支持 int timestamp datetime date
'auto_timestamp' => true,
// 时间字段取出后的默认时间格式
'datetime_format' => 'Y-m-d H:i:s',
// 时间字段配置 配置格式:create_time,update_time
'datetime_field' => '',
// 数据库连接配置信息
'connections' => [
'mysql' => [
// 数据库类型
'type' => env('database.type', 'mysql'),
// 服务器地址
'hostname' => env('database.hostname', '127.0.0.1'),
// 数据库名
'database' => env('database.database', ''),
// 用户名
'username' => env('database.username', 'root'),
// 密码
'password' => env('database.password', ''),
// 端口
'hostport' => env('database.hostport', '3306'),
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => env('database.charset', 'utf8'),
// 数据库表前缀
'prefix' => env('database.prefix', ''),
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 是否严格检查字段是否存在
'fields_strict' => true,
// 是否需要断线重连
'break_reconnect' => false,
// 监听SQL
'trigger_sql' => env('app_debug', true),
// 开启字段缓存
'fields_cache' => false,
],
// 更多的数据库配置信息
],
];
# 多应用通过 php think make:model 应用名@模型名
# 单应用通过 php think make:model 模型名
php think make:model admin@User
默认表明是模型名称的小写(User 对应 user表)
可以通过设置table属性指定表名
declare (strict_types=1);
namespace app\admin\model;
use think\Model;
/**
* @mixin \think\Model
*/
class User extends Model
{
# 不指定则查user表
protected $table = "admin_users";
}
模型默认主键id,可以通过设置模型pk属性重新指定主键字段
# 将模型主键改为mid
protected $pk = "mid";
通过设置 autoWriteTimestamp 是否开启自动写入创建时间&修改时间
autoWriteTimestamp 的默认值是true,开启自动写入
自动写入的创建时间字段是:create_time,可以通过 createTime属性修改该字段
自动写入的修改时间字段是:update_time,可以通过 updateTime属性修改该字段
declare (strict_types=1);
namespace app\admin\model;
use think\Model;
/**
* @mixin \think\Model
*/
class User extends Model
{
protected $autoWriteTimestamp = true;
protected $createTime = 'created_at';
protected $updateTime = 'updated_at';
}
需要使用 SoftDelete Trait
删除时间默认字段是delete_time 可以通过 deleteTime属性修改该字段
declare (strict_types=1);
namespace app\admin\model;
use think\Model;
use think\model\concern\SoftDelete;
/**
* @mixin \think\Model
*/
class User extends Model
{
use SoftDelete;
protected $deleteTime = "deleted_at";
}
# 返回插入后的user模型(模型包含插入的数据+插入后的主键)
# 修改前会对比新旧数据,如果没有差异并不会去操作数据库,而是直接返回true
$user = User::create([
'username' => 'username1',
'password' => '123456'
]);
# 主键
echo $user->id;
sava 有两种保存方法
第一种调用model的属性一个一个设置值,然后再保存
# 一个一个设置值,然后调用save 保存
# 成功后插入后的主键可以从当前对象上获取
$user = new User();
$user->username = "xieruixiang2";
$user->password = "123456";
$user->save();
echo $user->id;
第二种通过save() 批量保存
# 成功后插入后的主键可以从当前对象上获取
($user = new User())->save([
'username' => 'xieruixiang3',
'password' => '123456',
]);
echo $user->id;
通过save更新需要先查出获取到这个数据对应的model
$user = User::find(2);
# 返回true 修改成功 false修改失败
# 等价 $user->username = '666'
# $user->save();
# save保存会要修改的新旧数据,如果新旧数据一致,则不会去操作数据库,而是直接返回true
# 可以通过force(true)设置强制操作数据库
# $affect = $user->force(true)->save(['username' => '666']);
$affect = $user->save(['username' => '666']);
echo $affect;
# update 不触发模型事件
# 也不会自动写入更新时间
# 返回影响行数
# 如果修改的数据和数据库中的数据对比一致的话 $affect则返回0
$affect = User::where('id', 2)->where('num', '>', 10)->update(['username' => 'update4 username']);
# 通过静态update($data,$where,$filter) 修改数据,返回一个model对象
# $data 要修改的数据
# $where 修改条件
# $filter 过滤 当$filter不为空时,过滤$data中的数据(即$data中的key要在$filter中存在才会修改)
$user = User::update(['username' => 'xrx9', 'password' => '5666'], [['id', '>', 1]], ['username']);
# 通过saveAll($dataSet)
# $dataSet 要修改的数据,二维数组(其中一维数组要包含主键)
# 返回 由model元素组成的Collection对象
$user = new User();
$collection = $user->saveAll([
['id' => 1, 'username' => 'username_11'],
['id' => 2, 'username' => 'username_22'],
]);
# 通过查找model后调用delete删除
$user = User::find(2);
# 返回false|true 判断是否删除成功
$user->delete();
# 通过model::destroy($data)
# $data 可以是主键 代表删除一条数据
User::destroy(1);
# $data 可以是由主键构成的数组,代表删除多条数据
User::destroy([1, 2]);
# $data 可以是闭包函数,代表删除符合指定条件的数据
# 删除 id > 1 的数据
# 返回false|true 判断是否删除成功
User::destroy(function ($query) {
$query->where('id', '>', 1);
});
# 删除id 大于 1 的数据
# 如果该模型使用了软删除,则删除无效
# 返回false|true 判断是否删除成功
User::where('id', '>', 1)->delete();
# 如果模型使用了软删除
# 想要进行物理删除,可以使用force(true) + delete 删除数据
$user = User::where('id', 2)->find();
$user->force(true)->delete();
# 或者使用静态 destroy($data,$force)
# $force 为true代表物理删除
User::destroy([1, 2, 3], true);