版权声明:本文为ywcmoon原创文章,未经允许不得转载。 https://blog.csdn.net/qq_39251267/article/details/82253357
Lock方法是用于数据库的锁机制:
Db::name('user')->where('id',1)->lock(true)->find();
表示自动在SQL语句最后加上 FOR UPDATE
或者FOR UPDATE NOWAIT
(Oracle数据库
)。
lock方法支持传入字符串用于一些特殊的锁定要求,例如:
Db::name('user')->where('id',1)->lock('lock in share mode')->find();
在生成的SQL语句中添加注释内容
Db::table('think_score')->comment('查询考试前十名分数')
->field('username,score')
->limit(10)
->order('score desc')
->select();
生成的SQL语句:
SELECT username,score FROM think_score ORDER BY score desc LIMIT 10 /* 查询考试前十名分数 */
用于直接返回SQL而不是执行查询,适用于任何的CURD操作方法
$result = Db::table('think_user')->fetchSql(true)->find(1);
生成的sql:
`SELECT * FROM think_user where id = 1`
用于数据集的强制索引操作
Db::table('think_user')->force('user')->select();
对查询强制使用user索引,user必须是数据表实际创建的索引名称
用于手动参数绑定,大多数情况,无需进行手动绑定,系统会在查询和写入数据的时候自动使用参数绑定
// 用于查询
Db::table('think_user')
->where('id',':id')
->where('name',':name')
->bind(['id'=>[10,\PDO::PARAM_INT],'name'=>'thinkphp'])
->select();
// 用于写入
Db::table('think_user')
->bind(['id'=>[10,\PDO::PARAM_INT],'email'=>'[email protected]','name'=>'thinkphp'])
->where('id',':id')
->update(['name'=>':name','email'=>':email']);
用于是数据库水平分表
partition($data, $field, $rule);
// $data 分表字段的数据
// $field 分表字段的名称
// $rule 分表规则
注意:不要使用任何 SQL 语句中会出现的关键字当表名、字段名,例如 order 等。会导致数据模型拼装 SQL 语句语法错误。
// 用于写入
$data = [
'user_id' => 110,
'user_name' => 'think'
];
$rule = [
'type' => 'mod', // 分表方式
'num' => 10 // 分表数量
];
Db::name('log')
->partition(['user_id' => 110], "user_id", $rule)
->insert($data);
// 用于查询
Db::name('log')
->partition(['user_id' => 110], "user_id", $rule)
->where(['user_id' => 110])
->select();
用于设置是否严格检查字段名
// 关闭字段严格检查
Db::name('user')
->strict(false)
->insert($data);
注意,系统默认值是由数据库配置参数fields_strict
决定,因此修改数据库配置参数可以进行全局的严格检查配置,如下:
// 关闭严格检查字段是否存在
'fields_strict' => false,
设置查询数据为空时是否需要抛出异常,用于select和find方法,如果不传入任何参数,默认为开启
// 数据不存在的话直接抛出异常
Db::name('blog')
->where(['status' => 1])
->failException()
->select();
// 数据不存在返回空数组 不抛异常
Db::name('blog')
->where(['status' => 1])
->failException(false)
->select();
或者可以使用更方便的查空报错
// 查询多条
Db::name('blog')
->where(['status' => 1])
->selectOrFail();
// 查询单条
Db::name('blog')
->where(['status' => 1])
->findOrFail();
用于pgsql
数据库指定自增序列名,其它数据库不必使用
Db::name('user')->sequence('id')->insert(['name'=>'thinkphp']);