数据操作

查询数据

1 get方法

查询一条数据记录,在生成SQL时会自动加上LIMIT 1

get方法有2个可选参数,第1个参数指定主键值,第2个参数指定主键名(默认为id),如果设定了参数会覆盖where方法的设置。

$db->user->get(1);
$db->user->where('id', 1)->get();

查询结果返回数组或null

2 find方法

find方法查询多条数据记录。

find方法有一个可选参数,用来限定查询数据的条数,可以取代limit使用。

// 查询最近10个注册用户的用户名
$db->user->select('name')->order('id', true)->find(10);

添加数据

1 insert方法

插入一条数据

insert方法有2个参数,第一个参数是要插入的数据,第二个参数决定是否返回insert_id(默认为false不返回)

$db->post->insert([
'user_id' => 1,
'title' => '测试标题',
'content' => '测试内容',
]);

2 insertAll方法

批量插入多条数据

$db->post->insertAll([
[
'user_id' => 1,
'title' => '测试标题1',
'content' => '测试内容1',
],
[
'user_id' => 1,
'title' => '测试标题2',
'content' => '测试内容2',
],
[
'user_id' => 1,
'title' => '测试标题3',
'content' => '测试内容3',
],
]);

3 replace方法

替换插入或更新数据

replace方法使用 REPLACE INTO 语句来替换插入或更新数据

$db->post->replace([
'id' => 1
'user_id' => 1,
'title' => '测试标题',
'content' => '测试内容',
]);

更新数据

1 update

更新一到多条数据

update方法有3个参数,第1个参数是要更新的数据,后2个参数可选,分别用来指定主键值和主键名,

$db->post->update(['content' => '更新内容'], 1);
$db->post->where('id', 1)->update(['content' => '更新内容']);

执行结果返回更新数据条数

2 updateAuto

自增 自减方式自动更新数据

updateAuto方法有2个参数,第1个参数是要自动更新的数据,第2个参数是普通更新数据(默认为空)

// 帐号积分加1
$db->account->where('id', 1)->updateAuto(['score' => 1]);
// foo加1,bar加2,baz减1
$db->table->updateAuto(['foo' => 1, 'bar' => 2, 'baz' => -1]);

删除数据

1 delete

删除一到多条数据记录

delete方法有2个可选参数,第一个参数指定主键值,第一个参数指定主键名(默认为id),如果设定了参数会覆盖where方法的设置。

// 删除id为1的用户
$db->user->delete(1);
$db->user->where('id', 1)->delete();

执行结果返回删除数据条数

聚合查询

聚合方法 简述
max 最大值
min 最小值
sum 求和
avg 求积
count 记录数
// 最大积分数
$db->account->max('score')
// 用户主题数
$db->post->where('user_id', 1)->count()

Where子句

使用wherewhereOr方法

where子句支持多种参数组合来构造查询条件

3个参数

where子句使用3 个参数时,第1个参数是字段名,第2个参数为运算符,第3个参数对应的值。

$db->post->where('user_id', '>', 10)->find();
2个参数

where子句使用2个参数时,第1个参数是字段名,第2个参数对应的值,这里只是把运算符=省略了

// 如下2行代码作用相同,只是第一个省略了运算符=
$db->user->where('id', 1)->get();
$db->user->where('id', '=', 1)->get();
1个参数

where子句使用1个参数时,参数值必须为数组,使用数组来构造查询条件。

//查询用户1于2017-10-01后发表的所有主题
$db->post->where([
['id', '=', 1]
['time', '>', '2017-10-01']
])->find();
//查询用户1或用户2或用户3的所有主题,为了防止OR作为键名冲突可在其后加#数字。
$db->post->where([
['id', '=', 1]
'OR' => ['id', '=', 2]
'OR#3' => ['id', '=', 3]
])->find();
使用多个where whereOr子句
$db->post->where('id', 1)->where('time', '>', '2017-10-01')->find();
$db->post->where('id', 1)->whereOr('id', 2)->find();

where子句支持的运算符

['=', '!=', '>', '>=', '<', '<=', 'LIKE', 'IN', 'IS', 'BETWEEN']

其它子句

1 select子句

指定查询需要的字段,1到无穷参数,每个参数为字段。

$db->user->select('id', 'name', 'email')->find();

另外当参数为数组且有2个元素时,为设置字段别名,第1个元素为字段名,第2个元素为别名。

$db->user->select('id', ['name', 'user_name'])->find();

另外当参数为数组且3个元素时,为设置字段聚合方法,,第1个元素为字段名,第2个元素聚合方法,第3个元素为别名。

通常需要配合group使用

$db->post->select(['user_id', 'count', 'user_post_count'])->group('user_id')->find();
2 order子句

指定查询排序,支持多个子句组合。

order有2个参数,第一个参数指定要排序的字段,第二参数决定排序类型(默认为false)为true时为DESC排序。

$db->user->order('name')->order('id', true)->find();
3 limit

限定查询结果

limit有1个参数时,限定只查询对应数目的结果。有2个参数时,第1个参数为起始数,第2个参数为限定查询结果数。

// 查询前10个用户
$db->user->limit(10)->find();
// 查询前11-20主题贴
$db->post->limit(10, 10)->find();
4 page

page方法与limit类似,用于分页查询。

page方法第1个参数为页数,第2个参数为一页的记录数(默认为30)

// 查询第31到60条记录
$db->post->page(2)->find();
5 group

用于分组查询

// 查询每个用户发帖数
$db->post->select(['user_id', 'count', 'user_post_count'])->group('user_id')->find();
6 having

havingwhere类似只作用于group