A jeżeli zrobimy sobie model który będzie miał pola pobrane z bazy zapisane w jednej tablicy ($vals) a wprowadzone zmiany będzie przechowywał w innej ($valsChanged). Do polecenia update będą przekazywane tylko kolumny zapisane w $valsChanged. Po wykonaniu polecenia update nastąpi nadpisanie zmiennych z tablicy $vals przez zmienne z tablicy $valsChanged a sama tablica $valsChanged zostanie wyczyszczona.
W wypadku gdy użytkownik będzie chciał się dostać do obecnej wartości danej kolumny zostanie zwrócona wartość z tablicy $valsChanged jeżeli istnieje w przeciwnym warunku z tablicy $vals.
<?php
class MyObject
{
private $valsChanged = array();
...
public function getVals( $name )
{
// oczywiście można dożucić sprawdzanie czy dana kolumna faktycznie istnieje
return isset($this->valsChanged [$name]) ?
$this->valsChanged [$name] : $this->vals[$name]; }
public function update()
{
$querySet = '';
foreach( $this->valsChanged as $key => $val )
$querySet .= "$key = '$val', ';
$queryWhere
foreach( $this->vals as $key => $val )
$queryWhere.= "$key = '$val' AND ;
$query = sprintf( "UPDATE tabela SET %s WHERE %s", substr($querySet, 0
, -2
), substr($queryWhere, 0
, -4
) ); }
}
?>
To tylko taki schemat ideologiczny nie sprawdzany. Ale czy to nie będzie bardziej efektywne niż za każdym razem wysyłanie wszystkiego