【问题标题】:Laravel-5 Separate model for each log tableLaravel-5 每个日志表的单独模型
【发布时间】:2015-06-28 21:47:11
【问题描述】:

我目前正在使用Laravel 5 开发应用程序,我的主表是userssuppliersmanufacturers 等。

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

我计划使用Eloquent,并且我为每个主要表生成了一个Eloquentmodel

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

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

【问题讨论】:

  • 你的问题不清楚。能解释一下吗?
  • 我不确定这里是否有“正确”的答案。我们能希望的最好结果是找到一个比另一种更适合您的情况的方法,但任何一种方法都是可以接受的。结果将是一个固执己见的答案,这通常与 StackOverflow 无关。
  • @NomanUrRehman :我很抱歉不清楚。我的问题是我应该为user_log 表创建新的eloquent model 还是只使用user 模型并编写一个函数来执行日志记录操作。
  • @GeorgeCummins :所以我将只编写一个类似saveLog() 的方法并使用一些DB:: 来编写我的日志,因为这对我来说很容易执行而不是创建一个新的雄辩模型

标签: php mysql eloquent laravel-5


【解决方案1】:

我只会使用logs 表,因为日志应该是简单/通用/直截了当的东西。

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

  • 身份证
  • user_id(执行我们正在记录的操作的用户)
  • action(所执行操作的描述:deleted userupdated suppliercreated manufacturer 等)
  • url(用于执行操作的 URL)
  • ip(用户的IP地址)
  • 时间戳

考虑到这一点,您将为每种可记录表类型创建一个标准数据透视表,在您的情况下为 log_manufacturerlog_supplierlog_user(我在此处遵循 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 操作中,它都会透明地处理创建。

【讨论】:

  • 您也可以在主要模型和日志模型之间使用polymorphic relationship
  • 是的,这可能是另一种方法 :)
猜你喜欢
  • 2017-01-14
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多