13.6.3.37 Doc::store()
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 :
Doc::preStore()
Doc::preCreated()
- Enregistrement en base
Doc::postCreated()
Doc::preRefresh()
-
Doc::postRefresh()
- Enregistrement en base si modification détectée depuis dernier enregistrement
-
Doc::postStore()
- 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 :
Doc::preStore()
Doc::preRefresh()
-
Doc::postRefresh()
- Enregistrement en base
-
Doc::postStore()
- Enregistrement en base si modification détectée depuis dernier enregistrement