我有一个适用于数据库中一个用户的模型 它旨在对用户进行大量的小改动,因此我不是多次查询数据库,而是决定在模型的构造函数中获取所有用户的信息,然后通过其余部分处理该信息。 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;
}
?>
答案 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数组,并在完成操作数据后再将其保存到会话变量中。