problème avec ondelete

0 views
Skip to first unread message

simo

unread,
Jul 23, 2008, 3:24:29 AM7/23/08
to Symfony-fr
salut à tous.

J'ai un problème avec le comportement ondelete de Propel.

Je vous fais part d'une version simplifiée de mon schéma :

<table name="project" phpName="Project">
<column name="id" type="INTEGER" primaryKey="true" required="true"
autoIncrement="true"/>
<column name="project_id" type="INTEGER"/>
<column name="name" type="VARCHAR" required="true" size="255"/>
<column name="priority_id" type="INTEGER" required="true"/>
<foreign-key foreignTable="priority" onDelete="restrict">
<reference local="priority_id" foreign="id"/>
</foreign-key>
</table>

<table name="priority" phpName="Priority">
<column name="id" type="INTEGER" primaryKey="true" required="true"
autoIncrement="true"/>
<column name="name" type="VARCHAR" required="true" size="255"/>
</table>

Si j'ai bien compris le fontcionnement de onDelete, cela signifie que
si j'ai un objet projet associé à une priorité et que je souhaite
supprimer cette priorité, en lui donnant la valeur "restrict" je
soulève une erreur et symfony ne l'autorisera pas.

Si j'utilise MyIsam, mon application ignore complétement onDelete et
supprime l'objet priorité et les projets associés! Je pense que ca
devrait fonctionner en utisant le moteur myIsam, non ?
http://propel.phpdb.org/trac/wiki/Users/Documentation/1.2/FAQ#DoIneedtouseInnoDBtableswithMySQL

Si j'utilise innoDB, propel-insert-sql soulève une erreur lors de la
creation de la table projet!
Si j'execute la requete de creation de la table projet manuellement,
j'ai l'erreur suivante :
#1005 - Can't create table '.....' (errno: 150)

Je pense que MyIsam est plus approprié à mon application, en passant.

j'utilise sf1.0.17 et mysql5.0.45

Merci de m'éclairer, je galère!
simo

simo

unread,
Jul 23, 2008, 6:04:35 AM7/23/08
to Symfony-fr
Un peu de suivi ....

Avec innodb, l'erreur est la suivante :

http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html
SET NULL: Delete or update the row from the parent table and set the
foreign key column or columns in the child table to NULL. This is
valid only if the foreign key columns do not have the NOT NULL
qualifier specified. Both ON DELETE SET NULL and ON UPDATE SET NULL
clauses are supported.

donc si je supprime required="true" dans ma colonne priority_id (table
project), cela fonctionne!


Deuxième constat (surprenant) :
propel ne gère pas les évenements ondelete avec le moteur MyIsam......
> devrait fonctionner en utisant le moteur myIsam, non ?http://propel.phpdb.org/trac/wiki/Users/Documentation/1.2/FAQ#DoIneed...

lionel chanson

unread,
Jul 23, 2008, 6:30:44 AM7/23/08
to symfo...@googlegroups.com
Salut,

Au niveau moteur de bases de données, MyIsam ne gère pas les
contraintes de clés, InnoDB si.

Tu peux conserver MyIsam et utiliser Propel pour emuler la contrainte
de clés étrangères. Beaucoup de posts sont passés ici car il y avait
un problème.

Après c'est un choix technique. Suivant la taille de ton projet est-ce
une priorité de choisir un moteur de DB par rapport à un autre ?

++
Lionel

--
Un évènement symfony à Montpellier ?
http://s.ymfony.com

simo

unread,
Jul 23, 2008, 7:45:56 AM7/23/08
to Symfony-fr
Mais en lisant la doc, j'avais compris que propel émulait ces
fonctions sans que ce soit explicite. Or visiblement, il y faut le
configurer (via propel.ini)???
Du coup, je pense que je vais utiliser innoDB. Je ne pense pas que ca
affecte beauoup mon application.

merci pour la confirmation,
ciao, simo


On Jul 23, 3:30 pm, "lionel chanson" <lionel.chan...@gmail.com> wrote:
> Salut,
>
> Au niveau moteur de bases de données, MyIsam ne gère pas les
> contraintes de clés, InnoDB si.
>
> Tu peux conserver MyIsam et utiliser Propel pour emuler la contrainte
> de clés étrangères. Beaucoup de posts sont passés ici car il y avait
> un problème.
>
> Après c'est un choix technique. Suivant la taille de ton projet est-ce
> une priorité de choisir un moteur de DB par rapport à un autre ?
>
> ++
> Lionel
>
> Le 23 juillet 2008 12:04, simo <simon.geor...@gmail.com> a écrit :
>
>
>
>
>
> > Un peu de suivi ....
>
> > Avec innodb, l'erreur est la suivante :
>
> >http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints...
Reply all
Reply to author
Forward
0 new messages