查询构造器数据库操作返回值解析

数据库操作查询构造器

查询
find单条数据查询 方法查询结果不存在,返回 null,否则返回结果数组

select多条数据查询 方法查询结果是一个二维数组,如果结果不存在,返回空数组

如果你的数据表没有设置表前缀的话,那么name和table方法效果一致。

默认情况下,find和select方法返回的都是数组,区别在于后者是二维数组。

value单个字段查询 方法查询结果不存在,返回 null

column单列数据查询 方法查询结果不存在,返回空数组

插入
insert 方法添加数据成功返回添加成功的条数,通常情况返回 1
如果你的数据表里面没有foo或者bar字段,那么就会抛出异常。

insertGetId 方法添加数据成功返回添加数据的自增主键

insertAll多条数据添加 方法添加数据成功返回添加成功的条数

修改
update 方法返回影响数据的条数,没修改任何数据返回 0

setField 方法返回影响数据的条数,没修改任何数据字段返回 0

setInc/setDec 方法返回影响数据的条数,如果使用了延迟更新的话,可能会返回true

删除
delete 方法返回影响数据的条数,没有删除返回 0

使用模型方法返回值

插入
save方法返回影响的记录数,并且只有当before_insert事件返回false的时候返回false,从V5.1.6+版本开始统一返回布尔值

saveAll方法新增数据返回的是包含新增模型(带自增ID)的数据集对象。

和save方法不同的是,create方法返回的是当前模型的对象实例。

新增数据的最佳实践原则:使用create方法新增数据,使用saveAll批量新增数据。

修改
save方法返回影响的记录数,并只有当before_update事件返回false的时候返回false,从V5.1.6+版本开始统一返回布尔值

可以使用saveAll方法批量更新数据,只需要在批量更新的数

据中包含主键即可,批量更新仅能根据主键值进行更新,其它情况请自行处理。

数据库的update方法返回影响的记录数
模型的update方法返回模型的对象实例

上面两种写法的区别是第一种是使用的数据库的update方法,而第二种是使用的模型的update方法(可以支持模型的修改器、事件和自动完成)。

更新的最佳实践原则是:如果需要使用模型事件,那么就先查询后更新,如果不需要使用事件,直接使用静态的Update方法进行条件更新,如非必要,尽量不要使用批量更新。

删除
delete方法返回影响的记录数,V5.1.6+版本开始返回布尔值

当destroy方法传入空值(包括空字符串和空数组)的时候不会做任何的数据删除操作,但传入0则是有效的

删除的最佳实践原则是:如果删除当前模型数据,用delete方法,如果需要直接删除数据,使用destroy静态方法。

查询
模型无论使用get还是find方法查询,返回的是都当前模型的对象实例,如果查询数据不存在,则返回Null,除了获取模型数据外,还可以使用模型的方法。

V5.1.5+版本,模型增加了getOrFail方法用于查询,当查询的数据不存在的时候会抛出ModelNotFound异常。
如果你是在模型内部获取模型数据,请不要使用this>name使this->name的方式来获取数据,请使用this->getAttr(‘name’) 替代。

V5.1.21+版本开始,可以在all方法之前使用Db类的查询链式操作,

模型的all方法或者select方法返回的是一个包含多个模型实例的数据集对象(默认为\think\model\Collection),支持在模型中单独设置查询数据集的返回对象的名称

value和column方法返回的不再是一个模型对象实例,而是纯粹的值或者某个列的数组。

模型查询的最佳实践原则是:在模型外部使用静态方法进行查询,内部使用动态方法查询,包括使用数据库的查询构造器。模型的查询始终返回对象实例,但可以和数组一样使用。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

查询构造器数据库操作返回值解析