2010-08-16 5 views
1

Comment définir les propriétés dynamiques par défaut sur les objets CF9 ORM?Propriété dynamique par défaut dans CF9 ORM

Par exemple, je sais que je peux définir une valeur par défaut de la propriété comme ceci:

property name="isActive" default="1"; 

Mais si vous voulez avoir un défaut généré dynamiquement, comme une date ou un UUID?

property name="uuid" default="#createUUID()#"; 

... renvoie une erreur - alors, quelle est la solution pour cela?

Répondre

1

Lorsqu'un objet Entity est créé, le constructeur d'objets est appelé. C'est un bon endroit pour exécuter le code "setup".

User.cfc

component persistent="true" 
{ 
    property name="id" fieldtype="id" generator="native"; 
    property name="secretKey"; 

    public User function init() { 
    if (isNull(variables.secretKey)) 
     setSecretKey(createdUUID()); 

    return this; 
    } 
} 
+1

Cela fonctionne très bien pour les nouvelles entités, mais est écrasé par tout ce qui est chargé à partir de la base de données (même s'il s'agit d'une valeur vide). Cependant, comme je construis cette application à partir de zéro, sans données héritées, je peux être sûr que chaque entrée dans la base de données des utilisateurs sera créée avec cette valeur par défaut. (Dans votre code ci-dessus, les besoins fonction init() « return this; ». Ajouté à la fin) Merci, Seb – sebduggan

+0

Si vous voulez seulement exécuter ce code pour une nouvelle entité, vous pouvez toujours vérifier le id de l'entité if (isNull (getId()) {} –

+0

une alternative serait d'affecter uuid @ preInsert – Henry

0

Avez-vous essayé de surcharger le getter? Je ne peux pas tester cela d'où je suis, mais j'essaierais.

+0

Dan, je pense qu'il a besoin d'être un défaut et ne retourne toujours une nouvelle UUID. Que se passe-t-il si l'UUID persiste dans la base de données? –