Hello.
I'm rewriting shopping cart for my application. My current thinking of cart is:
Two model classes: Invoice
which can have many items in it and Item
which has one invoice, and a Singleton class Cart
for managing items in selected invoice, which stores ordered Items in session as array of records and a link to Invoice which currently in cart.
It works like:
Cart::getInstance()->getItems();
Cart::getInstance()->putItem($itemCode, $qty);
Cart::getInstance()->removeItem($itemCode);
Cart::getInstance()->save()
During operation with cart it stores items as array of records in session. All changes are written to database on save only.
$cart = Invoice::find([
'conditions'=>"user_id = :own_id: and invoice_number = :inv_num:",
'bind' => ['own_id'=>static::$ownerId,'inv_num'=>static::$invNum],
'limit' => 1
])->getFirst();
$cart -> InvoiceItems = static::$cartItems;
static::$cartInstance->save();
This works nice in test environment, however because I'm storing the whole records in session, I doubt if this is best solution. I haven't much experience with storing large session variables, but I know they do affect performance.
So, is there a better way to store Phalcon's result set, if don't want changes to be immediately written to database? (tmp database, toarray, caching, transactions?)
Any way to measure perfomance impact?