Clés étrangères dans une table I18n

64 views
Skip to first unread message

mikael.randy

unread,
Jul 3, 2009, 8:30:07 AM7/3/09
to Symfony-fr
Bonjour à tous

Développeur Symfony et Propel depuis plus d'un an, j'amorce désormais
le virage vers Doctrine.
Pour mon 1er projet, je me retrouve confronté à une difficulté que je
n'arrive pas à résoudre, même si je ne doute pas que Doctrine sais le
faire et que vous allez me débloquer facilement . ;o)

Voilà, comment, depuis un schema.yml avec Doctrine, définir une clé
étrangère dans une table I18n ?

Je m'explique, j'ai une table "Category", qui est traduite, via
l'utilisation du behavior "I18n", et une table "Media".
Je voudrais disposer d'un champ "id_media" dans la table
"Category_translate" qui pointe sur la table "Media".

Voici le schéma de base, sans la clé étrangère :
==================================
Category:
actAs:
I18n:
fields: [name, id_media]
columns:
id_thematique: { type: integer, primary: true, notnull: true,
autoincrement: true }
name: { type: string(45) }
id_media: {type: integer }

Media:
columns:
id_media: { type: integer, primary: true, notnull: true,
autoincrement: true }
==================================

J'ai tenté de définir la relation dans la table "Category", mais j'ai
un message d'erreur du type "Category.id_media not exist".
J'ai également tenté de définir la relation dans le behavior, mais
sans résultat, sans message d'erreur.

Est-ce que quelqu'un sait comment faire ?

FlyLM [ML]

unread,
Jul 3, 2009, 9:17:24 AM7/3/09
to symfo...@googlegroups.com

Quel est l'intérêt de vouloir passer "id_media" dans une table de traduction ??

Ce ne serait pas plutôt cela que tu veux faire :

Category:
actAs:
I18n:
fields: [name]
columns:
id_thematique: { type: integer, primary: true, autoincrement: true }


name: { type: string(45) }
id_media: {type: integer }

relations:
Media: { onDelete: CASCADE, local: id_media, foreign: id_media,
foreignAlias: Categories }

Media:
columns:
id_media: { type: integer, primary: true, autoincrement: true }

Fabien

mikael.randy

unread,
Jul 3, 2009, 9:31:26 AM7/3/09
to Symfony-fr
Non, non, je cherche bien à associer une image par traduction.

Chaque traduction n'aura pas la même image, pour différentes raison
(la principale étant que le client le demande xD), et je doit donc
faire en sorte que chaque traduction de chaque catégorie puisse être
associée à un media.
Tout en sachant que les médias pourront être associés à d'autres
tables, qui ne seront pas traduites. Il est donc exclu de créer une
traduction de mes médias ;)

On 3 juil, 11:17, "FlyLM [ML]" <flylm...@gmail.com> wrote:

FlyLM [ML]

unread,
Jul 3, 2009, 9:50:12 AM7/3/09
to symfo...@googlegroups.com
Le 3 juillet 2009 11:31, mikael.randy<mikael...@gmail.com> a écrit :
>
> Non, non, je cherche bien à associer une image par traduction.
>
> Chaque traduction n'aura pas la même image, pour différentes raison
> (la principale étant que le client le demande xD), et je doit donc
> faire en sorte que chaque traduction de chaque catégorie puisse être
> associée à un media.
> Tout en sachant que les médias pourront être associés à d'autres
> tables, qui ne seront pas traduites. Il est donc exclu de créer une
> traduction de mes médias ;)
>

Ok, au temps pour moi, je n'avais compris ce que tu voulais faire :-(
Je pense que ce n'est pas possible de le faire à partir du schema yml.

J'ai cherché il n'y a pas longtemps à mettre une clé étrangère sur la
langue utilisée dans les tables de traduction, ce n'était pas possible
à partir du schéma yml.

Fabien

Toofff

unread,
Apr 30, 2012, 8:25:55 AM4/30/12
to symfo...@googlegroups.com
Bonjour,

je suis actuellement sur Symfony 1.4 avec doctrine 1.2.
Je voulais faire la même chose que toi avec une clef étrangère dans la table translation pour avoir une table média commune à tout mon projet.

Donc j'ai réussi.. je te balance mon schema.yml

Ma Table "Media" :
Media:
  connection:               doctrine
  tableName:               media
  actAs:
    SoftDelete:
      fields:                   [deleted_at]
    Timestampable:
      fields:                   [created_at, updated_at]
  options:
    type:                      InnoDB
    collate:                   utf8_unicode_ci
    charset:                  utf8
    symfony:
      filter:                    false
  columns:
    id:                          { type: integer(4), notnull: true, unsigned: true, primary: true, autoincrement: true }
    type:                      { type: string(50), notnull: true }
    filename:                { type: string(255), notnull: false, default: NULL }
    file_size:                { type: integer, notnull: false, default: NULL }
    file_width:               { type: integer, notnull: false, default: NULL }
    file_height:              { type: integer, notnull: false, default: NULL }
    type_mime:             { type: string(50), notnull: false, default: NULL }
    extension:               { type: string(5), notnull: false, default: NULL }

Ma Table "Pdf" :
Pdf:
  connection:                    doctrine
  tableName:                     pdf
  actAs:
    I18n:
      fields:                        [titre, media_id]
    SoftDelete:
      fields:                        [deleted_at]
    Timestampable:
      fields:                        [created_at, updated_at]
  options:
    type:                            InnoDB
    collate:                         utf8_unicode_ci
    charset:                        utf8
  columns:
    id:                                { type: integer(4), notnull: true, unsigned: true, primary: true, autoincrement: true }
    titre:                             { type: varchar(255), notnull: true }
    hidden:                         { type: boolean, notnull: true, default: 1 }
    media_id:                      { type: integer(4), notnull: false, unsigned: true, default: NULL }
  relations:
    Media:                       { class: Media, local: media_id, foreign: id, type: one, foreignType: many }

Par contre le problème que j'ai eu, c'est que ma relation je la nomme rarement avec le nom de ma table qui fait appelle!! Donc ma relation Media dans ma table Pdf je l'appelle Fichier, c'est une grosse erreur car doctrine n'arrive pas à faire la relation entre Pdf et Media. Donc le plus simple est d’appelé ça relation du même nom que la table relationnelle.

J'espère que j'ai était assez clair?

Si ça peut aidé...


Le vendredi 3 juillet 2009 11:50:12 UTC+2, FabD a écrit :

Le vendredi 3 juillet 2009 11:50:12 UTC+2, FabD a écrit :
Le vendredi 3 juillet 2009 11:50:12 UTC+2, FabD a écrit :
Reply all
Reply to author
Forward
0 new messages