ThinkPHP5.0数据库CURD的删除(Delete)操作和使用链式方法

删除操作指对数据表的单个记录或者多个记录的删除操作,示例代码如下:

// 删除数据

Db::name('data')

->where('id', 18)

->delete();

和更新操作一样,ThinkPHP不允许使用无条件删除操作,如果不带条件可以直接使用主键删除:

// 删除数据

Db::name('data')

->delete(18);

// 删除多条数据

Db::name('data')

->delete([1, 5, 8]);

如果你确定要执行无条件删除操作, 可以使用下面的方式:

// 删除所有数据

Db::name('data')

->delete(true);

事实上,对于业务数据表,基本上不建议使用删除操作,而是使用软删除(逻辑删除,其实执行的是数据表的更新操作)替代实际的物理删除。

掌握了基本的CURD操作后,我们就来熟悉下链式方法的概念,其实就是前面我们提到的辅助查询方法。首先链式方法的目的是为了让查询更清晰和直观,下面的两个代码实现哪个更清晰易懂大家可以比较下。

ThinkPHP5.0数据库CURD的删除(Delete)操作和使用链式方法

事实上,我们前面使用的table、where、limit之类的方法都称之为链式方法,辨别一个方法是否属于链式方法的一个显著特征就是看这个方法是否返回当前的对象实例。正因为链式操作方法返回的是当前对象实例,所以不同的链式方法在调用的顺序上没有先后的概念,但相同的链式方法调用顺序会影响最终的查询,下面的两个例子完全等效:

ThinkPHP5.0数据库CURD的删除(Delete)操作和使用链式方法

上面两个查询最终生成的SQL语句是完全相同的。但下面两个查询最终生成的SQL是不同的

ThinkPHP5.0数据库CURD的删除(Delete)操作和使用链式方法

多个where方法和order方法的调用顺序最终影响了生成的SQL语句,虽然有时候并不会影响查询结果。上面的两个例子where方法的顺序并不会影响查询条件,而order方法的顺序则改变了最终数据的排序。链式方法的调用顺序取决于你的思维习惯或者说团队规范。


分享到:


相關文章: