ThinkPHP5.0的模型CURD删除Delete操作

模型的主要功能包括数据处理和业务逻辑,而这些都离不开数据的CURD操作,因此我们首先来谈下数据的CURD操作,在掌握了数据库Db类的用法后,模型的CURD操作就会很容易理解,因为本质上模型的CURD操作最终调用的还是Db类的操作,区别在于使用了ActiveRecord模式和单独做了一层封装而已,我们来看下两种方式CURD操作用法的简单对比(其中模型会给出动态和静态两种实现方法,分别对应不同的场景)。

ThinkPHP5.0的模型CURD删除Delete操作

delete方法没有任何参数,因此只能删除当前实例的模型数据,destroy方法支持删除指定主键或者查询条件的数据,例如:

ThinkPHP5.0的模型CURD删除Delete操作

早期版本的destroy方法如果传入空值,会删除数据表的所有数据,该问题已经在V5.0.9版本得到修正(不会执行任何删除)。

在模型的删除功能设计的时候,应该尽量用软删除替代实际的删除,一方面是为了避免数据丢失,一方面也是为了性能考虑(数据库的删除操作会导致重建索引,数据量越大影响越大),关于软删除的用法我们放到高级用法中描述。

删除操作用法小结:

方法作用返回值
delete删除当前数据影响的记录数
destroy删除指定数据(静态)影响的记录数

现在我们已经掌握了模型的基本CURD操作,我们来总结下方法区别:

用法Db类模型(动态)模型(静态)
创建insertsavecreate
更新updatesaveupdate
读取单个findfind get
读取多个selectselectall
删除deletedeletedestroy

除了模型自己的方法操作外,还可以调用Db类的所有查询方法,也就是说Db类的CURD操作方法都可以在模型类中被调用。

不知道大家注意到一个细节没,模型的创建操作和更新操作的动态方法都是save,而并没区分。其实对于对象实例来说,所有的数据变化都只需要有一个保存行为,至于是创建还是更新那是数据库内部的事情,对不起模型对象不关心。模型会根据当前的场景自动判断是创建还是更新操作。

然后要注意几个注意事项:

  • 模型类可以直接调用Db类的所有方法;

  • 模型类和Db类的查询返回类型是完全不同的,即便是调用同一个方法查询;

  • 模型类封装的静态方法本质上还是调用的动态方法,只是为了方便不同的需求场景;

  • 模型对象的查询操作尽量使用静态方法调用;


分享到:


相關文章: