/** * Sauvegarde les valeurs de l'entité en base de donnée * @param array $options * @return boolean */ public function save($options = array()) { // Options $options = array_merge(array('ignore' => FALSE, 'replace' => FALSE, 'force_insert' => FALSE), $options); // Clé primaire $field = $this->_storage->get($this->_config->getPrimaryKey()); $field_value = $field->getValue(); // Si la la requête doit être de type INSERT $has_insert = empty($field_value) || $options['force_insert'] === TRUE; // Si il y a pas de changement if ($this->_storage->dirty() === FALSE) { return FALSE; } // Etat de la requête $query = FALSE; // Si la requete est de type replace if ($options['replace']) { // Exécute la requête $query = $this->write()->from($this->_config->getTable())->replace(); // Si l'insertion est correcte if ($query === TRUE) { // Met a jour la clé primaire en silence $this->_storage->set($field->getName(), $this->db()->insert_id(), TRUE); } // Si la requete est de type insert } else { if ($has_insert === TRUE) { // Exécute la requête $query = $this->write()->from($this->_config->getTable()); if ($options['ignore']) { $query = $query->insert_ignore(); } else { $query = $query->insert(); } // Si l'insertion est correcte if ($query === TRUE) { // Met a jour la clé primaire en silence $this->_storage->set($field->getName(), $this->db()->insert_id(), TRUE); } // Si la requete est de type update } else { // Exécute la requête $query = $this->write()->from($this->_config->getTable())->where($field->getName(), $field->getValue()); if ($options['ignore']) { $query = $query->update_ignore(); } else { $query = $query->update(); } } } // Change le status de l'entité if ($query === TRUE && $this->_storage->isNew()) { $this->_storage->isNew(FALSE); } // Vide les changements $this->_storage->clean(); // La requête a échoué return $query; }