0

有没有办法破解 codeigniter 以在默认情况下让它在执行任何插入/更新时将时间跨度和 user_id 插入表中的特定列?

我在数据库中有 8 个表,都包含 (update_time,updated_by)columns ,我想设置 codeigniter 活动记录,以便在发生更新/插入时自动填充update_time=time() and update_by=$this->session->userdata('user')->id;

同样在同一概念上,我想将删除操作破解为更新列(存档)= 1 而不是删除(因为我的 mysql 用户无论如何都没有删除记录访问权限)

可能吗 ?

4

2 回答 2

1

如果您想破解 CI 来完成此操作,您应该查看 system/drivers/DB_Active_rec.php(假设您使用 CI 中的活动记录功能)

例如,您可以通过修改该文件中的更新方法在更新中插入当前时间。改变这个:

public function update($table = '', $set = NULL, $where = NULL, $limit = NULL)
{
    // Combine any cached components with the current statements
    $this->_merge_cache();

    if ( ! is_null($set))
    {
        $this->set($set);
    }
            [...]

进入:

public function update($table = '', $set = NULL, $where = NULL, $limit = NULL)
{
    // Combine any cached components with the current statements
    $this->_merge_cache();

    // start of Insert updated_time hack
    $time_format = 'Y-m-d H:i:s';
    $set['update_time'] = date($time_format);
    // end of hack

    if ( ! is_null($set))
    {
        $this->set($set);
    }
            [...]
于 2013-03-10T14:44:53.947 回答
0

您可以使用mysql 的现有功能在update_time插入或更新记录时自动更新列。但是,更新user_id是您必须从应用程序手动执行的操作。

您的其他要求通常被某些人称为软删除,您可以通过在列上打开标志来将行标记为已删除。这是可能的,但您必须确保所有选择和更新查询都避免打开此标志的行。

最好仔细构建模型方法以符合应用程序的这两个要求。您也许可以使用扩展 CI 的核心模型来自定义更新/选择查询,所有扩展 MY_Model 的子类都将使用该查询。

于 2013-03-10T08:08:40.613 回答