Thinkphp5.0框架使用模型Model的获取器、修改器、软

网络编程 2025-03-31 04:02www.168986.cn编程入门

深入理解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程序设计过程中能有所助益。

结束语:以上内容请根据实际项目需求和应用场景进行调整和优化。如有任何疑问或建议,欢迎交流。

上一篇:jQuery post数据至ashx实例详解 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by