developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.
Opened 13 years ago
Closed 13 years ago
#383 closed bug (invalid)
erreur après un insert lorsqu'une DAO comporte des property faisant appel à une foreigntable
Reported by: | chris | Owned by: | |
---|---|---|---|
Priority: | normal | Milestone: | Jelix 1.0RC2 |
Component: | jelix:dao | Version: | 1.0 beta 3.1 |
Severity: | critical | Keywords: | |
Cc: | Blocked By: | ||
Blocking: | Documentation needed: | ||
Hosting Provider: | Php version: |
Description
Je pense pouvoir dire qu'il y a un bug quelque part, sans bien savoir où précisément. Si j'ai une dao avec quelquechose du genre :
<datasources> <primarytable name="commande_article" realname="TJ_commande_article_ARC" primarykey="id" /> <foreigntable name="article" realname="T_article_ART" primarykey="id" onforeignkey="article_ART_id" /> </datasources> <record> <property name="id" fieldname="id" datatype="bigautoincrement" required="yes"/> <property name="article" fieldname="article_ART_id" datatype="int" required="yes"/> <property name="art_prixvente" table="article" fieldname="prixvente" datatype="float" required="no"/> <property name="art_partbonachat" table="article" fieldname="partbonachat" datatype="float" required="no"/> <property name="art_partbonachatPC" datatype="float" selectpattern="article.partbonachat / article.prixvente * 100" updatepattern="" insertpattern="" required="no"/> </record>
Lorsque je fais select ou update, pas de problème, mais si je fais un insert, la valeur est bien insérée dans la base, mais j'obtiens une erreur sur un select qui suit automatiquement. J'imagine que ce select est fait pour récupérer l'enregistrement qui vient d'être pris en compte, mais manifestement la requête qu'il fait est incomplète puisque l'erreur indique ne pas connaître article.partbonachat.
Je suppose que c'est la foreigntable qui n'est pas prise en compte, alors que le champ lui est appelé.
PS : je précise que la dao indiquée en exemple n'est pas complète, je n'y ai laissé que les éléments qui me semblent concernés.
Change History (4)
comment:1 Changed 13 years ago by chris
comment:2 Changed 13 years ago by laurentj
Je n'arrive pas à voir comment résoudre ce problème. il me faudrait plus de précision. Tu n'as pas d'autres propriétés qui ont un selectpattern ou qui sont autoincrement ? C'est quoi l'erreur affichée exactement ?
comment:3 Changed 13 years ago by laurentj
c'est bon, j'ai pu voir d'où ça pouvait venir...
comment:4 Changed 13 years ago by laurentj
- Resolution set to invalid
- Status changed from new to closed
En fait il n'y a pas d'erreur dans jDao, mais dans ton fichier XML : la propriété art_partbonachatPC est une propriété calculée utilisant des propriétés qui ne font pas parti de la table principale. Elle doit donc être assignée à la table article (il faut donc rajouter table="article" sur la balise). En effet, il serait compliqué dans jDao de vérifier le contenu de selectPattern, et donc de déterminer si cette propriété doit être mise à jour ou non lors d'un insert/update.
Je vais compléter la documentation pour préciser l'utilisation de selectPattern.
La seule solution que j'ai trouvée pour l'instant est de faire une 2ème DAO, sans les foreigntable, juste pour l'insert. Et comme j'avais déjà du dupliquer à cause du bug sur le groupby, ça m'en fait 3 pour la même chose. Bonjour la maintenance ;-)