1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
/**
* Update / Insert into db
*
* @param array $data, if $data is null, will insert
* @return number the key value (id) of the saved object or false if error
*/
public function save($data = null)
{
if ($data === null)
{
$data = $this->toArray();
}
$db = $this->getAdapter() ;
$data = $this->_cleanData($data);
reset($this->_primary) ;
$primary = is_array($this->_primary) ? current($this->_primary) : $this->_primary ;
$id = 0 ;
if (array_key_exists($primary, $data) && $data[$primary])
{
if(is_array($this->_primary) && count($this->_primary) > 1)
$id = array_intersect_key($data, array_flip($this->_primary)) ;
else
$id = $data[$primary] ;
$db = $this->getAdapter();
$where = array() ;
foreach($this->_primary as $key)
{
if(array_key_exists($key, $data) && $data[$key])
{
array_push($where, $db->quoteInto($key . ' = ?', $data[$key])) ;
unset($data[$key]);
}
}
$this->update($data, $where);
}
else
{
if (array_key_exists($primary, $data))
unset($data[$primary]);
$id = $this->insert($data);
}
return $id;
} |