【TP5 :数据库:查询构造器:链式操作】lock,comment,fetchSql,force,bind,partition,strict,failException

版权声明:本文为ywcmoon原创文章,未经允许不得转载。 https://blog.csdn.net/qq_39251267/article/details/82253357

lock

Lock方法是用于数据库的锁机制:

Db::name('user')->where('id',1)->lock(true)->find();

表示自动在SQL语句最后加上 FOR UPDATE或者FOR UPDATE NOWAITOracle数据库)。

lock方法支持传入字符串用于一些特殊的锁定要求,例如:

Db::name('user')->where('id',1)->lock('lock in share mode')->find();

comment

在生成的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 /* 查询考试前十名分数 */

fetchSql

用于直接返回SQL而不是执行查询,适用于任何的CURD操作方法

$result = Db::table('think_user')->fetchSql(true)->find(1);

生成的sql: 

`SELECT * FROM think_user where id = 1`

force

用于数据集的强制索引操作

Db::table('think_user')->force('user')->select();

对查询强制使用user索引,user必须是数据表实际创建的索引名称


bind

用于手动参数绑定,大多数情况,无需进行手动绑定,系统会在查询和写入数据的时候自动使用参数绑定

// 用于查询
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

用于是数据库水平分表

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();

strict

用于设置是否严格检查字段名

// 关闭字段严格检查
Db::name('user')
    ->strict(false)
    ->insert($data);

注意,系统默认值是由数据库配置参数fields_strict决定,因此修改数据库配置参数可以进行全局的严格检查配置,如下:

// 关闭严格检查字段是否存在
'fields_strict'  => false,

failException

设置查询数据为空时是否需要抛出异常,用于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();

sequence

用于pgsql数据库指定自增序列名,其它数据库不必使用

Db::name('user')->sequence('id')->insert(['name'=>'thinkphp']);

猜你喜欢

转载自blog.csdn.net/qq_39251267/article/details/82253357
今日推荐