jay's help to create

Aller au contenu | Aller au menu | Aller à la recherche

vendredi, avril 1 2011

Tutoriel : Les relations One to Many dans Symfony 1.4 et Doctrine

Après les relations Many to many, il faut bien expliquer les relations plus simples. 

La documentation est plus simple à trouver, mais voici tout de même la bonne manière de faire (celle grâce à laquelle doctrine gère tout sans avoir à rien faire ;) )

Page:
  columns:
    id:
      type: integer(4)
      primary: true
      notnull: true
      autoincrement: true
    titre:
      type: varchar(255)
    contenu:
      type: text(65535)
    emplacement_id:
      type: integer(4)
  relations:
     Emplacement:
       class: Emplacement                #class de l’autre table
       local: emplacement_id         #champ qui va accueillir la relation
       foreign: id                                  #champ de l’autre table qui sert d’ancrage
 
 
Emplacement:
  columns:
    id:
      type: integer(4)
      primary: true
      notnull: true
      autoincrement: true
    libelle:
      type: varchar(255)
      notnull: true

Dans ma relation, une page à un emplacement sur le site, (footer, left_menu, top_menu, right_menu).
Sur la table emplacement on ne met donc rien du tout, toute la relation est définie sur la table page.
Il faut donc prévoir un champ ( emplacement_id par convention) pour accueillir la clef externe.

Ensuite, la relation se fait en déclarant les champs par rapport à la table qu’on appel.

jeudi, mars 31 2011

Les relations many to many avec doctrine et symfony 1.4

Ca fait longtemps (très longtemps) que je n’avais pas écrit sur ce blog.

J’ai eu l’occasion de passer à symfony 1.4 depuis et de voir les changements.
Le plus gros d’entre eux c’est bien sur de passer de l’ORM propel à l’ORM doctrine.

Il faut revoir pas mal de ses habitudes, mais il faut avouer que les relations et les formulaires imbriqués sont bien mieux gérés maintenant.
Enfin à condition de bien concevoir son schema.yml.

C’est là le principal problème, si le schéma est bien fait, symfony fait tout automatiquement. Sinon il faut tout le temps bricoler.
Ors, j’ai lut beaucoup de solutions qui merdaient d’une façon ou d’une autre avant de trouver celle qui répondait vraiment à mes besoins.

Voici donc un exemple de relation en many-to-many dans le schema.yml :

 

[php]Site:
  columns:
    id:
      type: integer(4)
      primary: true
      notnull: true
      autoincrement: true
    url:
      type: varchar(255)
      notnull: true
    libelle:
      type: varchar(255)
      notnull: true
  relations:
    Lien:
      class: Site
      local: site_id
      foreign: lien_id
      refClass: LienSite
      onDelete: CASCADE
Lien:
  columns:
    id:
      type: integer(4)
      primary: true
      notnull: true
      autoincrement: true
    url:
      type: varchar(255)
      notnull: true
      unique: true
    libelle:
      type: varchar(255)
      notnull: true
    description:
      type: string(128)
  relations:
    Site:
      class: Lien
      local: lien_id
      foreign: site_id
      refClass: LienSite
      onDelete: CASCADE
 
LienSite:
  tableName: site_has_lien
  columns:
    site_id:
      type: integer(4)
      primary: true
    lien_id:
      type: integer(4)
      primary: true
  indexes:
    fk_site_has_lien_lien1:
      fields: [lien_id]
    fk_site_has_lien_sites1:
      fields: [site_id]

 

 

Pour les deux tables concernées, on ajoute donc les relations vers l’autre table, en indiquant la table servant de référence entre les deux

 [php]relations:
    Site:                                            # le nom de la relation, il sera utilize lors
de l’appel du formulaire par l’admin generator par exemple. 
      class: Lien                              #La classe à laquelle se réfere votre relation, dans une relation many to many, c’est la même classe (Lien pour une relation dans la table lien etc…)
      local: lien_id                        # l’id qui represente la primary key de cette table dans la table référence
      foreign: site_id                  # l’id de l’autre table en relation représenté dans la table de reference
      refClass: LienSite              # la table de référence
      onDelete: CASCADE        # une contrainte classique pour éviter les problèmes ;)
 

Si on s’y prend comme cela, il n’y a ensuite plus rien à faire dans les formulaires, tout est géré automatiquement.
Le seul réglage dans mon cas est de rendre un champs unset dans un des deux cas, si je ne veux pas que le champs de lien s’affiche sur le formulaire des sites…

Vous aurez donc un widget « site_list » dans votre formulaire lien, et un widget « lien_list » dans votre formulaire site.

vendredi, novembre 12 2010

Paperblog plateforme de pillage de votre contenu

Alors que j’étais assez content de l’utilisation de la plate-forme Paperblog pour la promotion de ce blog, j’ai eu le malheur de vouloir l’utiliser pour la promotion d’un blog sous Wordpress. 

Grosse erreur. Le service de diffusion m’a généreusement vampiriser l’ensemble de mes articles.

Lire la suite...

lundi, novembre 1 2010

L'importance de cliquer sur les pubs

Ceci n’est pas un article pour promouvoir les clics illicites, mais juste un moyen de rappeler au public averti de ce blog l’importance des revenus publicitaires pour la qualité d’un blog.

Beaucoup d’entre nous en dépendent, et ces clics influencent notre manière de travailler.

Lire la suite...

mercredi, octobre 27 2010

Google Baraza : le google spécial Afrique

Google vient de lancer un nouveau service à destination du continent Africain. 

Bienvenu sur Google Baraza, ou comment combler le manque de contenu du web Africain intélligemment.

Lire la suite...

- page 1 de 11

Générateur de miniatures