BaseModel.php
iterator
Country.php
abstract class BaseModels extends Model implements Auditable {
public function needAudit() {
return true;
}
public function __construct() {
static::deleting(function ($m) {
if ($m->needAudit() === true && !app()->runningInConsole() && defined('IN_ADMIN') && IN_ADMIN === true) {
$admin = \Auth::guard('admin')->user();
AuditRecords::addLog($admin->username . ' deleted ' . $m->getAuditDescription(), 'delete_' . $m->table, AuditRecords::OPERATION_DELETE, $m);
}
});
static::created(function ($m) {
if ($m->needAudit() === true && !app()->runningInConsole() && defined('IN_ADMIN') && IN_ADMIN === true) {
$admin = \Auth::guard('admin')->user();
AuditRecords::addLog($admin->username . ' created ' . $m->getAuditDescription(), 'create_' . $m->table, AuditRecords::OPERATION_CREATE, $m);
}
});
static::updated(function ($m) {
if ($m->needAudit() === true && !app()->runningInConsole() && defined('IN_ADMIN') && IN_ADMIN === true) {
if ($m->exists() && $m->isDirty()) {
$admin = \Auth::guard('admin')->user();
AuditRecords::addLog($admin->username . ' edited ' . $m->getAuditDescription(), 'edit_' . $m->table, AuditRecords::OPERATION_UPDATE, $m);
}
}
});
}
}
Auditable.php
class Country extends BaseModels {
public function getAuditDescription() {
return getClassName($this) . ' ' . $this->country_name_en;
}
const STATUS_INACTIVE = 0;
const STATUS_ACTIVE = 1;
protected $table = 'country';
}
尝试使用laravel eloquent event删除,创建和更新所有admin路由的一些自动审核日志,但 \ App \ Models \ Country.php 日志每次保存> 3次 , \ App \ Models \ Bank.php 记录 7次 每次保存,都会生成附加图片
答案 0 :(得分:2)
为什么在构造函数中有这些东西?构造函数并不是每个类都运行一次,而是每次创建该类的新实例时都运行,并且这些注册侦听器的调用是静态的。
您每次创建类实例时都添加事件侦听器。您创建该模型的2个实例,您将注册2个侦听器,因为您要调用2次代码以注册侦听器。 3-> 3次,4-> 4次....
我还希望这不是真正的构造函数,因为它缺少模型需要具备和执行的所有重要内容。
答案 1 :(得分:1)
修复
abstract class BaseModels extends Model implements Auditable {
public function needAudit() {
return true;
}
//CHANGED THIS, THE FIX
public static function boot() {
static::deleting(function ($m) {
if ($m->needAudit() === true && !app()->runningInConsole() && defined('IN_ADMIN') && IN_ADMIN === true) {
$admin = \Auth::guard('admin')->user();
AuditRecords::addLog($admin->username . ' deleted ' . $m->getAuditDescription(), 'delete_' . $m->table, AuditRecords::OPERATION_DELETE, $m);
}
});
static::created(function ($m) {
if ($m->needAudit() === true && !app()->runningInConsole() && defined('IN_ADMIN') && IN_ADMIN === true) {
$admin = \Auth::guard('admin')->user();
AuditRecords::addLog($admin->username . ' created ' . $m->getAuditDescription(), 'create_' . $m->table, AuditRecords::OPERATION_CREATE, $m);
}
});
static::updated(function ($m) {
if ($m->needAudit() === true && !app()->runningInConsole() && defined('IN_ADMIN') && IN_ADMIN === true) {
if ($m->exists() && $m->isDirty()) {
$admin = \Auth::guard('admin')->user();
AuditRecords::addLog($admin->username . ' edited ' . $m->getAuditDescription(), 'edit_' . $m->table, AuditRecords::OPERATION_UPDATE, $m);
}
}
});
}
}