Пример #1
0
 /**
  * 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;
 }