I have a model that works with one user in the database.
It is designed to do a lot of small changes to the user, so instead of querying the database multiple times I decided to get all of the user’s information in the constructor of the model, and then work on that information through out the rest of the model (so instead of updating the database, it would be updating the array I got). Then I would just save that array back to the database in the destructor.
This works fine, but I’ve been reading a bit more, and it turns out you shouldn’t run any non-cleanup code in the destructor (which is where I’m running the update query to the database). So I was curious, is there a better way to do this? Am I missing a better solution?
Thanks, Max
EDIT:
Here is an example of what I am doing (Note: This example is a shopping cart class, not a user class though):
<?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;
}
?>
You can directly manipulate session data in your AddItem() method. Something like this:
This way if you want to manipulate the Cart_data session variable in other methods, you can still do it. Just update the CartCache array in every method and save it again to the session variable once you’ve done manipulating data in it.