Laravel`delete()`影响其他时间戳列

时间:2017-08-09 10:26:57

标签: php laravel laravel-5 soft-delete

我正在使用Laravel软删除来“删除”记录。但是奇怪的事情正在发生,用于软删除记录的delete()命令显然会影响我表中的其他时间戳行,除非我错过了一些关键的东西。

我的模型(仅包含相关部分,名称空间全部包含在内):

use SoftDeletes;
protected $fillable = [ 'card_id', 'expiry_date' ]; // where expiry_date is the timestamp row being affected.
protected $hidden = ['created_at', 'updated_at', 'deleted_at'];

我的控制器

public function destroy(IdCardFormRequest $request, $id)
{
    $idCard = IdCard::find($id);
    if(isset($idCard )){

        $operationStatus = $idCard ->delete();

        if($operationStatus) {
            $request->session()->flash('status', 'success');
            $request->session()->flash('message', 'Id card deleted successfully');
            return redirect()->route('admin.id-card.index');
        }
    }
}

问题
当我使用适当的路由启动删除过程时,MySql数据行被正确地软删除,但另一个基于时间戳的行,即expiry_date被更新为当前时间戳。我已经阅读了与Laravel中软删除相关的整个文档,并没有提到其他时间戳列会受到影响。

The documentation I've read

修改:我已使用dateTime()代替timestamp()解决了问题。我仍然不确定这是否适合这个

1 个答案:

答案 0 :(得分:2)

根据您使用的数据库,datetime和timestamp列类型可能会执行不同的操作。

例如,在MariaDB / MySQL中,datetime只是一种以特定格式保存日期和时间的列类型。

timestamp列类型也包含日期和时间,但除非明确覆盖,否则将在添加/更新记录时自动更新。

来自MariaDB文档:

  

时间戳字段通常用于定义添加或更新行的时刻,默认情况下会在插入或更新记录时自动分配当前日期时间。