Thinkphp5.0框架使用模型Model的获取器、修改器、软
深入理解Thinkphp5.0框架的模型Model:获取器、修改器与软删除操作
在Thinkphp5.0框架中,模型(Model)是非常关键的部分,用于与数据库进行交互操作。本文将重点介绍模型中的获取器(Accessor)、修改器(Mutator)以及软删除数据操作。结合实例,我们会深入这些功能的使用方法和相关技巧。
一、获取器(Accessor)
获取器用于在模型查询时修改字段的返回值。例如,假设数据库中存储的性别为数字(0未知、1男、2女),但在查询时我们希望返回对应的汉字描述。这时,就可以使用获取器来实现。
在Model中定义获取器的方法为:get字段名Attr。例如,对于性别字段可以这样定义:
```php
public function getSexAttr($val) {
switch ($val) {
case '1':
return '男';
case '2':
return '女';
default:
return '未知';
}
}
```
我们还可以定义其他获取器,如格式化时间戳的获取器:
```php
public function getAddtimeAttr($val) {
if ($val) {
return date('Y-m-d H:i:s', $val);
} else {
return $val;
}
}
```
在Controller中调用模型实例后,可以使用toArray()或getData()方法来获取数据,并自动应用获取器的效果。
二、模型修改器(Mutator)
修改器用于在模型保存数据前修改字段值。例如,对于密码字段,我们可能需要在保存前对其进行MD5加密。在Model中定义修改器的方法为:set字段名Attr。例如,对于密码字段可以这样定义:
```php
public function setPasswordAttr($val, $data = null) {
if ($val === '') {
return $val;
} else {
return md5($val . ($data['email'] ?? '')); // 使用空合并运算符处理未定义的情况
}
}
```
三、软删除数据操作
六、软删除功能详解
在数据库操作中,有时我们需要删除某条记录,但又不想真的从数据库中移除它。这时,软删除功能就派上用场了。软删除并不是真正地删除记录,而是通过修改某个字段的状态来标记这条记录已经删除。
在ThinkPHP框架中,我们可以很方便地实现软删除功能。
一、模型层设置
在模型类中,我们需要引入软删除的类。例如,在User模型中:
```php
namespace app\index\model;
use think\Model;
use traits\model\SoftDelete; // 引入软删除的类
class User extends Model {
// 使用软删除
use SoftDelete;
// 如果需要修改默认的字段名字
protected $deleteTime = 'deltime'; // 设置为自定义的删除时间字段名
}
```
二、控制器操作
在控制器中,我们可以使用模型类提供的方法来进行软删除操作。例如:
```php
$res = User::destroy(1); // 软删除ID为1的用户记录
// 返回影响的行数
dump($res);
```
执行删除后,会更新`delete_time`字段。如果`update_time`字段也开启了自动完成,那么`update_time`字段也会被更新。
三、数据获取
获取数据时,会默认过滤掉`delete_time`不为null的记录。为了确保正确地显示数据,需要注意`delete_time`字段的默认值应设置为null,而不是其他值,例如0。
如果需要获取包含软删除的数据,可以使用`withTrashed(true)`方法。例如:
```php
$res = User::withTrashed(true)->select(); // 获取包含软删除的数据
```
如果需要获取已软删除的数据,可以使用`onlyTrashed()`方法。例如:
```php
$res = User::onlyTrashed()->select(); // 获取已软删除的数据
```
四、强制删除
如果开启了软删除,但又需要真正地删除某条数据,不做软删除,可以在`destroy()`或`delete()`方法中传递第二个参数为true。例如:
```php
$res = User::destroy(15, true); // 强制删除ID为15的记录
$userData = User::get(15); // 获取ID为15的用户数据
$userData->delete(true); // 强制删除该用户数据
```
更多关于ThinkPHP框架的内容,读者可以查阅相关专题资料。希望本文所述内容对大家在基于ThinkPHP框架的PHP程序设计过程中能有所助益。
结束语:以上内容请根据实际项目需求和应用场景进行调整和优化。如有任何疑问或建议,欢迎交流。
编程语言
- Thinkphp5.0框架使用模型Model的获取器、修改器、软
- jQuery post数据至ashx实例详解
- 作为PHP程序员应该了解MongoDB的五件事
- php+html5基于websocket实现聊天室的方法
- Webpack的dll功能使用
- JS实现table表格数据排序功能(可支持动态数据+分
- 基于PHP实现堆排序原理及实例详解
- 详解Axios 如何取消已发送的请求
- MySQL复制出错 Last_SQL_Errno-1146的解决方法
- Django 标签筛选的实现代码(一对多、多对多)
- Javascript中prototype与__proto__的关系详解
- jQuery实现伪分页的方法分享
- vue如何在自定义组件中使用v-model
- 跟我学Laravel之请求(Request)的生命周期
- JavaScript中的数组操作介绍
- jquery实现无限分级横向导航菜单的方法