gpt4 book ai didi

php - 创建存储库方法,将信息记录到数据库(mysql)表中。

转载 作者:行者123 更新时间:2023-11-29 10:46:33 25 4
gpt4 key购买 nike

我正在开发 Laravel 5 应用程序。每当用户创建或更新项目时,我想将信息记录到数据库表中。

我已经创建了新的迁移文件 - Logs。在日志表中,我想存储信息:哪个用户更改或添加了某些内容,哪个表已更改以及旧值和新值。

在我看来,最简单的方法是创建新的存储库方法,并以某种方式将存储和更新方法与新的日志方法连接起来。

这就是我的存储库的样子:

private function log()
{
// place for log method
}

public function store($request)
{
Radar::create([
'date' => $request->input('date'),
'number' => $request->input('number'),
'distance' => $request->input('distance'),
'time' => $request->input('time'),
'speed' => $request->input('distance') / $request->input('time') * 3.6,
'user_id' => auth()->id()
]);
}

public function update($request, $radar)
{
$radar->date = $request->input('date');
$radar->number = $request->input('number');
$radar->distance = $request->input('distance');
$radar->time = $request->input('time');
$radar->speed = $request->input('distance') / $request->input('time') * 3.6;
$radar->user_id = auth()->id();
$radar->save();
$this->log($radar);
}

我想要简单的可重用解决方案,而不需要编写太多代码。

最佳答案

您可以使用event listenersobservers为此或使用类似 revisionable 的包

您可以聆听 Eloquent 事件

Event::listen('eloquent.created: *', function($model) {
// log stuff
});

您可以在 EventServiceProvider 中定义它

<小时/>

或者,如果您想要记录一个或多个模型:

class Radar extends Model 
{
protected static function boot()
{
parent::boot();

static::created(function($radar) {
// log stuff
});

static::updated(function($radar) {
// log stuff
});

// will be triggered on both created and updatd
// static::saved(function($radar) {
// log stuff
// });
}
}
<小时/>

使用可修订包,您可以简单地包含一个特征并定义要跟踪的字段。

<?php namespace App;

use Illuminate\Database\Eloquent\Model;
use Sofa\Revisionable\Laravel\Revisionable; // trait

class User extends Model
{
use Revisionable;

/*
* Set revisionable whitelist - only changes to any
* of these fields will be tracked during updates.
*/
protected $revisionable = [
'email',
'name',
];

关于php - 创建存储库方法,将信息记录到数据库(mysql)表中。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44453058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com