在类内引入trait,并手动指定修改器,也就是说deleted_at字段,我们使用 Carbon 进行实例化操作。 class Event extends Model { use SoftDeletes; protected $dates = ['created_at','deleted_at','started_at','updated_at']; } 保存这些更改之后,下次删除与此模型关联的记录时,deleted_at列将被设置为当前时间。
use Illuminate\Database\Eloquent\Model;use Illuminate\Database\Eloquent\SoftDeletes;classContactextendsModel{use SoftDeletes;// 这是一个 traitprotected$dates=['deleted_at'];// 指定deleted_at的datetime格式} 通过追寻源代码,我们注意到 SoftDeletes 其实是注册了一个模型内的全局作用域方法: 代码语言:javasc...
软删除实现逻辑 /vendor/laravel/framework/src/Illuminate/Database/Eloquent/SoftDeletingScope.php $builder->onDelete(function(Builder$builder){ $column=$this->getDeletedAtColumn($builder); return$builder->update([ $column=>$builder->getModel()->freshTimestampString(), ]); }); /vendor/laravel/f...
Laravel本身支持软删除,只需要进行少量的配置更改,以确保在执行delete或destroy时,模型的记录不会被实际删除。作为一个例子,我们修改Event模型以支持软删除。 首先创建一个新的迁移,将名为deleted_at的列添加到events表中: php artisan make:migration add_soft_delete_to_events --table=events 执行成功,输出内容如...
/** * Force a hard delete on a soft deleted model. * * @return bool|null */ public function forceDelete() { $this->forceDeleting = true; return tap($this->delete(), function ($deleted) { $this->forceDeleting = false; if (...
<?php namespace App\Models; use Dcat\Laravel\Database\SoftDeletes; use Illuminate\Database\Eloquent\Model; class Post extends Model { use SoftDeletes; /** * 自定义软删除表表名,默认为 {$table}_trash * * @var string */ protected $trashedTable = 'posts_trash'; /** * 自定义软删除表...
Model的软删除功能实现 Illuminate\Database\Eloquent\Model 中delete⽅法源码:public function delete(){ if (is_null($this->getKeyName())) { throw new Exception('No primary key defined on model.');} if (! $this->exists) { return;} if ($this->fireModelEvent('deleting') === false) {...
* * @return void */ public function initializeSoftDeletes() { $this->dates[] = $this->getDeletedAtColumn(); } /** * Force a hard delete on a soft deleted model. * * @return bool|null */ public function forceDelete() { $this->forceDeleting = true; return tap($this->delete()...
如果这个时候我们想修改这三个字段的名称可以在对应的MODEL类中添加以下代码 const DELETED_AT='delete_at'; const UPDATED_AT='update_at'; const CREATED_AT = 'create_at'; 以上处理只能是在没有使用软删除时正常工作,如果使用了软删除则必须重写 SoftDeletingTrait 中的几个方法,并且扩展Illuminate\Database\...
当运行数据库填充时,默认情况下,所有的 Eloquent 数据模型现在都是 unguarded 的,在之前的版本中,你需要手动调用 Model::unguard()。如果你还想在运行数据填充时开启 guard 模式的话,请在 DatabaseSeeder 类的最开始部分调用 Model::reguard()。Eloquent...