使用查询构造器进行查询,起码需要掌握查询类的几个关键的方法。这些方法对SQL稍微了解一点的用户理解起来应该不难,find和select方法的区别在于find方法只是查询一条记录(即使满足条件的记录有很多),并且返回的是一个一维数组(没有结果返回Null),而select方法返回的是一个二维数组(没有结果返回空数组),除此之外,他们的查询语法都是相同的。这些常用方法其实包含两种大的类别,一个是辅助方法(辅助查询用的,也称为链式方法,例如table、field、where、order和limit等方法),一个是真正的查询方法(find、select、insert、update和delete方法),查询方法是必须的,而辅助方法是可选的,并且辅助方法必须在查询方法之前被调用,并且在查询调用之后自动失效。使用查询构造器进行查询,能够最大程度的避免写针对特定数据库的查询语句,减少跨数据库类型的迁移成本。下面我们对数据库的CURD操作给出基本的用法。创建操作指往数据表添加新的记录,下面是示例代码:
insertAll方法的数据集中的元素请确保字段列表一致,否则会出错。由于insert和insertAll方法最终都是调用连接类的execute方法,我们已经知道execute方法的返回值是影响的记录数,所以insert和insertAll方法的返回值也是影响(新增)的记录数,并不会返回主键值。主键id如果是自增类型,可以使用:
// 插入单个记录
Db::table('data')
->insert(['name' => 'kancloud']);
如果需要获取自增id的值,可以在insert方法之后紧接着调用getLastInsID方法:
// 插入单个记录
Db::table('data')
->insert(['name' => 'kancloud']);
// 获取上次写入的自增Id
$id = Db::getLastInsID();
由于PDO内部的原因,insertAll方法后调用getLastInsID方法返回的自增Id可能存在偏差。或者直接合并上面的代码为:
// 插入单个记录 并返回自增Id
$id = Db::table('data')
->insertGetId(['name' => 'kancloud']);
对于不在数据表中的字段写入,系统默认会抛出异常,但可以配合strict(false)方法忽略错误继续执行,下面的test数据会被忽略(data表不存在test字段)。
// 插入单个记录 并返回自增Id
$id = Db::table('data')
->strict(false)
->insertGetId([
'name' => 'kancloud',
'email' => 'kancloud@qq.com',
'test' => '这个数据不会被写入',
]);
你并不需要考虑写入数据失败的情况,数据库操作过程有任何的错误都会抛出异常,你需要做的只是修正BUG或者捕获异常自行处理。