laravel自动变更数据字段值;laravel 自定义软删

Laravel自动变更数据字段值;Laravel 自定义软删

在Laravel中,我们经常需要对数据库中的某些字段进行自动处理,比如自动更新时间戳、自动变更字段值等。同时,Laravel自带的软删除功能有时可能无法满足我们的需求,我们需要自定义软删除逻辑。本文将介绍如何在Laravel中实现这些功能,并提供多种解决方案。

解决方案概述

  1. 自动变更数据字段值:通过模型事件或中间件来实现。
  2. 自定义软删:通过覆盖Laravel的默认软删除逻辑或使用模型事件来实现。

自动变更数据字段值

使用模型事件

Laravel提供了丰富的模型事件,可以在模型的生命周期中执行特定的操作。例如,我们可以在创建或更新模型时自动变更某些字段的值。

php
namespace AppModels;</p>

<p>use IlluminateDatabaseEloquentModel;
use IlluminateSupportFacadesAuth;</p>

<p>class Post extends Model
{
    protected $fillable = ['title', 'content', 'status', 'created_by'];</p>

<pre><code>protected static function boot()
{
    parent::boot();

    static::creating(function ($post) {
        $post->created_by = Auth::id();
        $post->status = 'draft'; // 默认状态为草稿
    });

    static::updating(function ($post) {
        if ($post->isDirty('status')) {
            // 如果状态发生变化,记录日志
            Log::info("Post status changed from {$post->getOriginal('status')} to {$post->status}");
        }
    });
}

}

使用中间件

我们也可以在请求到达控制器之前通过中间件来自动变更数据字段值。

php
namespace AppHttpMiddleware;</p>

<p>use Closure;
use IlluminateSupportFacadesAuth;</p>

<p>class SetDefaultValues
{
    public function handle($request, Closure $next)
    {
        if ($request->isMethod('post') && $request->routeIs('posts.store')) {
            $request->merge([
                'created_by' => Auth::id(),
                'status' => 'draft',
            ]);
        }</p>

<pre><code>    return $next($request);
}

}

然后在 Kernel.php 中注册中间件:

php
protected $middlewareGroups = [
'web' => [
// 其他中间件
AppHttpMiddlewareSetDefaultValues::class,
],
];

自定义软删

覆盖默认软删除逻辑

Laravel的默认软删除逻辑可以通过覆盖 delete 方法来自定义。

php
namespace AppModels;</p>

<p>use IlluminateDatabaseEloquentModel;
use IlluminateDatabaseEloquentSoftDeletes;</p>

<p>class Post extends Model
{
    use SoftDeletes;</p>

<pre><code>protected $dates = ['deleted_at'];

public function delete()
{
    // 自定义逻辑,例如记录日志
    Log::info("Post with ID {$this->id} is being soft deleted");

    // 调用父类的 delete 方法
    return parent::delete();
}

}

使用模型事件

我们也可以在模型事件中实现自定义软删除逻辑。

php
namespace AppModels;</p>

<p>use IlluminateDatabaseEloquentModel;
use IlluminateDatabaseEloquentSoftDeletes;</p>

<p>class Post extends Model
{
    use SoftDeletes;</p>

<pre><code>protected $dates = ['deleted_at'];

protected static function boot()
{
    parent::boot();

    static::deleting(function ($post) {
        // 自定义逻辑,例如记录日志
        Log::info("Post with ID {$this->id} is being soft deleted");
    });
}

}

总结

通过上述方法,我们可以在Laravel中轻松实现自动变更数据字段值和自定义软删除逻辑。无论是使用模型事件还是中间件,都能灵活地满足不同的业务需求。希望本文对你有所帮助!

Image

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/68747.html<

(0)
管理的头像管理
上一篇2025-02-06 19:34
下一篇 2025-02-06 19:35

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注