developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 12 years ago

Closed 12 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 12 years ago by chris

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 ;-)

comment:2 Changed 12 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 12 years ago by laurentj

c'est bon, j'ai pu voir d'où ça pouvait venir...

comment:4 Changed 12 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.

Note: See TracTickets for help on using tickets.