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.

lundi, octobre 11 2010

Free globes, script d'annuaire open source PHP/Mysql

Freeglobes est un de ces scripts qui nous font aimer l’open source. 
Avec lui on peut créer un annuaire php/Mysql très rapidement, avec des thèmes qui correspondent à nos besoins spécifiques.

Concurrent d’Arfoo, c’est lui que j’ai choisi pour mon dernier projet, voici mon avis après installation.

Lire la suite...

vendredi, septembre 24 2010

Classe PHP pour Pinger un service web

Après un script simple pour “pinguer” les différents services web qui nous aident à rendre nos sites plus visibles, voici une class PHP5 plus évoluée qui va vous permettre de pinguer les services en fonction de leur cible.

Ainsi vous pourrez ne pas pinguer les services de blogging si vous avez un site web classique, ou ne pinguer que les aggrégateurs de flux comme feedburner pour vos RSS.

Lire la suite...

lundi, septembre 13 2010

Comparatif des frameworks php 2 - le livre blanc de Clever Age

Après le comparatif de l’agence smile, voici le comparatif des framework php de Clever Age.
Complémentaire et plus récent, il décrit longuement les avantages généraux des framework php.
Avec ces deux livres blancs, vous aurez toutes les pièces pour choisir le framework qui conviendra à vos projets.

Lire la suite...

- page 1 de 3

Générateur de miniatures