在 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 中限制记录的插入的主要内容,如果未能解决你的问题,请参考以下文章