Puis-je ajouter une condition à CakePHP de l'instruction de mise à jour?

Car il ne semble pas y avoir de soutien pour le verrouillage optimiste dans CakePHP, je vais prendre un coup de couteau à la construction d'un comportement qui l'implémente. Après un peu de recherche dans les comportements, je pense que je pourrais exécuter une requête dans l'événement beforeSave pour vérifier que le champ version n'a pas changé.

Cependant, j'ai plutôt de mettre en œuvre le contrôle par la modification de l'instruction de mise à jour de la clause where de

WHERE id = ?

à

WHERE id = ? and version = ?

De cette façon, je n'ai pas à vous soucier d'autres demandes de modification de l'enregistrement de base de données entre le moment où j'ai lu la version et le temps que j'ai exécuter la mise à jour. Cela signifie aussi que je peux faire une base de données d'appel, au lieu de deux.

Je peux voir que la DboSource.update() méthode prend en charge les conditions, mais Model.save() ne se passe jamais de toutes les conditions.

Il semble que j'ai un couple d'options:

  1. Faire le check-in beforeSave() et vivre avec le fait que ce n'est pas l'épreuve des balles.
  2. Hack ma copie locale de CakePHP pour vérifier un conditions clé dans la options tableau de Model.save() et le transmettre à la DboSource.update() méthode.

Maintenant, je suis penché en faveur de la deuxième option, mais cela signifie que je ne peux pas partager mon comportement avec les autres utilisateurs, sauf si elles s'appliquent mon hack de leur cadre.

Ai-je raté une option plus facile?

OriginalL'auteur Don Kirkby | 2009-09-25