在 Laravel 中限制记录的插入

Posted

技术标签:

【中文标题】在 Laravel 中限制记录的插入【英文标题】:Limit the Insert of Records in Laravel 【发布时间】:2022-01-04 06:01:47 【问题描述】:

限制 Laravel 中的记录插入

当前我想要实现的是我想将记录限制为假设 100 现在当我们尝试插入新记录时,我们应该删除一个(第一个)记录并插入新创建的记录

目前我正在像这样手动操作

if(Logs::count() >= 100) Logs::fist()->delete(); //fuction call again  
else Logs::create(); 

我想简单地做到这一点并尝试集中化

【问题讨论】:

查看***.com/questions/48137006/… 你试过模式观察者吗? 你用的是什么数据库? @apokryfos iam 使用 mysql @ManojKiranAppathurai 你的意思是模型观察者吗,是的,我确实找到了解决方案,谢谢 【参考方案1】:

是的,经过一些研究,我找到了解决方案,我使用了模型观察器

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

        static::created(function ($model) 
           /* Getting the log limt */
            $setting = Setting::where(['option' => 'log_queue_size'])->first();
            if ($setting) 
                $limit = $setting->value['log_queue_size'] ?? 100;
                $logQuery = Log::get();

                $keepIds = $logQuery->take($limit)->pluck('id');
                Log::whereNotIn('id', $keepIds)->delete();
            
           
        );
    

【讨论】:

【参考方案2】:

您不需要从数据库中获取所有记录,您只需要记录数

/**
     * The "booting" method of the model.
     *
     * @return void
     */
    protected static function boot()
    
        parent::boot();


        static::created(function ($model) 
            /* Getting the log limt */
            $setting = Setting::where(['option' => 'log_queue_size'])->first();
            if ($setting) 
                $limit = $setting->value['log_queue_size'] ?? 100;               
                $actualCount = Log::query()->count();

                if ($actualCount > $limit) 
                    $recordsToDelete = $actualCount - $limit;
                    Log::query()->latest()->take($recordsToDelete)->delete();
                
            
        );
    

【讨论】:

上述解决方案有帮助

以上是关于在 Laravel 中限制记录的插入的主要内容,如果未能解决你的问题,请参考以下文章

如何在laravel中插入多条记录而不循环

如何使用单一表单(Laravel)在 2 个表中插入记录?

使用 Laravel 限制多态多对多关系中的相关记录

没有在laravel中的数据库中插入记录

Laravel 从一个表单中插入多条记录

Laravel Eloquent插入记录两次