13.6.3.37 Doc::store()

Cette méthode enregistre les modifications d'un document en base de données.

13.6.3.37.1 Description

string store (storeInfo &$info = null, bool $skipConstraint = false )

Cette méthode permet la modification ou la création de document. Si le document n'a pas d'identifiant (id), une création de document est effectuée, sinon le document est mis à jour.

13.6.3.37.1.1 Avertissements

Le document n'est enregistré en base de donnée que si un changement a été détecté. Si un attrbut est affecté à sa valeur initiale, aucun changement n'est détecté et le document ne sera pas enregistré. La détection de changement est réalisée par la méthode Doc::setValue() ainsi que les méthodes de plus hauts niveaux telles que Doc::setAttributeValue() ou Doc::addArrayRow. Si les valeurs d'attributs sont directement modifiées dans l'objet la méthode Doc::store() ne réalise pas l'enregistrement.

13.6.3.37.2 Liste des paramètres

(storeInfo) info
Si info est fourni, il contiendra les différents messages fournis par les hameçons ainsi que le code d'erreur.
(bool) skipConstraint
Si la valeur est false alors les contraintes sur le document ne sont pas testées.

13.6.3.37.3 Valeur de retour

La valeur de retour contient le message d'erreur.

Si l'enregistrement s'est bien passé le retour est une chaîne de caractères vide. Dans le cas contraire, le texte de l'erreur est retourné.

Des informations plus détaillées sont disponibles dans le paramètre $info.

13.6.3.37.4 Erreurs / Exceptions

Si l'enregistrement en base de donnée n'a pas pu être réalisée, alors la méthode retourne un message d'erreur.

Le code de retour du paramètre $info est indiqué dans l'attribut errorCode. Les différents codes d'erreur de $info->errorCode sont :

storeInfo::NO_ERROR
Pas d'erreur.
storeInfo::CREATE_ERROR
Erreur lors de la création. Peut provenir de l'hameçon Doc::preCreated(), d'un problème de droits ou d'un problème d'accès à la base de données.
storeInfo::UPDATE_ERROR
Erreur lors de la mise à jour. Peut provenir d'un problème de droits ou d'un problème d'accès à la base de données.
storeInfo::CONSTRAINT_ERROR
Une des contraintes n'a pas été validée.
storeInfo::PRESTORE_ERROR
Erreur déclenchée par l'hameçon Doc::preStore().

Une exception Dcp\Db\Exception peut être levée en cas de problème d'enregistrement au niveau de la base de données (problème d'accès, problème d'unicité d'index, problème d'incohérence de type).

13.6.3.37.5 Historique

Aucun.

13.6.3.37.6 Exemples

Soit la famille MY_FAMILY suivante :

BEGIN Ma famille MYFAMILY
CLASS My\MyFamily
// idattr idframe label T A type ord vis
ATTR MY_IDENTIFICATION Identification N N frame 10 W
ATTR MY_NUMBERONE MY_IDENTIFICATION nombre 1 Y N int 20 W
ATTR MY_NUMBERTWO MY_IDENTIFICATION nombre 2 N N int 30 W
END

13.6.3.37.6.1 Modification d'un document

Exemple d'enregistrement d'une modification sans contrôle d'erreur.

use \Dcp\AttributeIdentifiers\MyFamily as MyAttributes;
 
/** @var \Dcp\Family\MyFamily */
$d=new_Doc("","MY_DOCUMENT");
$d->setValue(MyAttributes::my_numberone, 234);
$d->store($info); // enregistrement en base de données

13.6.3.37.6.2 Création d'un document

Exemple d'enregistrement d'un nouveau document sans contrôle d'erreur.

use \Dcp\AttributeIdentifiers\MyFamily as MyAttributes;
 
/** @var \Dcp\Family\MyFamily */
$d=createDoc("","MY_FAMILY");
$d->setValue(MyAttributes::my_numberone, 234);
$d->setValue(MyAttributes::my_numbertwo, 873);
$d->store($info);// enregistrement en base de données
printf("Nouvel identifiant : %d\n", $d->id);

13.6.3.37.6.3 Contrôle des erreurs d'enregistrement

Les codes erreurs de $info permettent de préciser l'origine du problème.

use \Dcp\AttributeIdentifiers\MyFamily as MyAttributes;
 
/** @var \Dcp\Family\MyFamily */
$d = new_Doc("", "MY_DOCUMENT");
$err = $d->setValue(MyAttributes::my_numberone, 234);
 
if (empty($err)) {
    /** @var storeInfo $info */
    $err = $d->store($info);
    if (!empty($err)) {
        switch ($info->errorCode) {
            case storeInfo::NO_ERROR:
                // pas d'erreurs
                break;
            case storeInfo::CONSTRAINT_ERROR:
                printf("Erreurs de contrainte :\n");
                foreach ($info->constraint as $constraintInfo) {
                    printf("Contrainte sur l'attribut %s non respectée : %s\n", 
                        $constraintInfo["id"], 
                        $constraintInfo["err"]);
                }
                break;
            default:
                printf("Erreur d'enregistrement : %s", $err);
        }
    }
}

13.6.3.37.7 Notes

Lors d'un ajout de documents les hameçons suivants sont lancés :

  1. Doc::preStore()
  2. Doc::preCreated()
  3. Enregistrement en base
  4. Doc::postCreated()
  5. Doc::preRefresh()
  6. Doc::postRefresh()
  7. Enregistrement en base si modification détectée depuis dernier enregistrement
  8. Doc::postStore()
  9. Enregistrement en base si modification détectée depuis dernier enregistrement

Lors d'une mise à jour de documents les hameçons suivants sont lancés :

  1. Doc::preStore()
  2. Doc::preRefresh()
  3. Doc::postRefresh()
  4. Enregistrement en base
  5. Doc::postStore()
  6. Enregistrement en base si modification détectée depuis dernier enregistrement

13.6.3.37.8 Voir aussi

×