Laravel-5每个日志表的单独模型

时间:2015-04-21 15:51:01

标签: php mysql eloquent laravel-5

我目前正在使用Laravel 5开发一个应用程序,我的主要表格为userssuppliersmanufacturers等。

这些表中的每一个都有一个单独的users_logsuppliers_log日志表。这些日志表的目的是审查为单个实体执行的操作(例如:属于特定制造商的日志以及过去为该制造商所做的更改等)。

我打算使用Eloquent,并为每个主要表生成Eloquent model

我的问题:我应该为每个日志表生成单独的Eloquent模型,还是只在主表的模型中编写user_log()之类的方法来编写我的问题日志中。

P.S :要使用我的应用程序的用户数量很少,因此将日志写入数据库优先于文件日志。

1 个答案:

答案 0 :(得分:3)

我只会使用logs表,因为日志应该是简单/通用/简单的。

这些是我将使用的logs表格列:

  • ID
  • user_id(执行我们正在记录的操作的用户)
  • 操作(已执行操作的说明:deleted userupdated suppliercreated manufacturer等)
  • url(用于执行操作的网址)
  • ip(用户的IP地址)
  • 时间戳

考虑到这一点,您将为每个可记录的表类型设置一个标准数据透视表,在您的情况下,该表将是log_manufacturerlog_supplierlog_user(我' m遵循Laravel表命名约定,但如果您愿意,请继续使用其他名称。

通过这种方式,您可以通过任何类型的日志进行全局搜索:

$logs = Log::where('user_id', 1)->get(); // get all logs of User 1

按特定日志类型(用户,供应商,制造商等):

$logs = Log::has('suppliers')
            ->where('user_id', 1)
            ->get(); // get Supplier logs created by User 1

或获取按Log过滤的所有特定模型:

$manufacturers = Manufacturer::whereHas('logs', function ($query)
{
    $query->where('user_id', 1);
})
->get(); // get all Manufacturers that have been manipulated by User 1

为了在logs表格上创建新条目,我会使用Model Observers,以便在每个createdupdateddeleted行动它会透明地处理创作。