Codeigniter,如果没有在析构函数中运行模型保存代码?

时间:2011-08-08 04:10:23

标签: codeigniter model standards destructor

我有一个适用于数据库中一个用户的模型 它旨在对用户进行大量的小改动,因此我不是多次查询数据库,而是决定在模型的构造函数中获取所有用户的信息,然后通过其余部分处理该信息。 model(所以不是更新数据库,而是更新我得到的数组)。然后我只是将该数组保存回析构函数中的数据库。

这样可以正常工作,但我已经阅读了一些,结果发现你不应该在析构函数中运行任何非清理代码(我正在运行对数据库的更新查询)。所以我很好奇,有没有更好的方法呢?我错过了一个更好的解决方案吗?

谢谢,Max

编辑: 这是我正在做的一个例子(注意:这个例子是购物车类,但不是用户类):

<?php
class cartmodel extends CI_Model
{
    private $sessionPrefix = 'Cart_';
    private $CartCache = array();


    function __construct ()
    {
        if ($this->session->userdata($this->sessionPrefix.'data') === FALSE)
            $this->session->set_userdata($this->sessionPrefix.'data', array());

        $this->CartCache = $this->session->userdata($this->sessionPrefix.'data');

        parent::__construct();
    }
    function __destruct ()
    {
        $this->session->set_userdata($this->sessionPrefix.'data', $this->CartCache);
    }   

    function AddItem ($id, $count)
    {
        if ($count == 0 || $count == '' || !is_numeric($count))
            return;

        if (!isset($this->CartCache[$id]))
            $this->CartCache[$id] = 0; //Initialize it so that += works

        $this->CartCache[$id] += (int)$count;
    }
?>

1 个答案:

答案 0 :(得分:1)

您可以直接在AddItem()方法中操作会话数据。像这样:

function AddItem ($id, $count)
    {
        // UPDATE CartCache VARIABLE
        $this->CartCache = $this->session->userdata($this->sessionPrefix.'data');

        // YOUR CODE BELOW
        if ($count == 0 || $count == '' || !is_numeric($count))
            return;

        if (!isset($this->CartCache[$id]))
            $this->CartCache[$id] = 0; //Initialize it so that += works

        $this->CartCache[$id] += (int)$count;

        // SAVE CartCache IN SESSION AGAIN
        $this->session->set_userdata($this->sessionPrefix.'data', $this->CartCache);
    }

这样,如果你想在其他方法中操作Cart_data会话变量,你仍然可以这样做。只需在每个方法中更新CartCache数组,并在完成操作数据后再将其保存到会话变量中。