P3 A new story begins

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

mercredi 1 avril 2009

Association One-To-One

Voici comment se traduit les différentes associations de type One-To-One : OneToOne Associations

Voici le code PHP produit :

  1. <?php
  2.  
  3. namespace org\rapidoo\demo\onetoone;
  4.  
  5. //-------------------------------------------
  6. // One-to-one mono navigable with 1 key
  7. //-------------------------------------------
  8.  
  9. class A {
  10.  
  11. /**
  12.   * The id property.
  13.   * @var int
  14.   */
  15. private $id;
  16.  
  17. /**
  18.   * The name property.
  19.   * @var B
  20.   */
  21. private $b;
  22.  
  23. }
  24.  
  25. class B {
  26.  
  27. /**
  28.   * The id property.
  29.   * @var int
  30.   */
  31. private $id;
  32.  
  33. }
  34.  
  35. //-------------------------------------------
  36. // One-to-one binavigable with 2 keys
  37. //-------------------------------------------
  38.  
  39. class C {
  40.  
  41. /**
  42.   * The id property.
  43.   * @var int
  44.   */
  45. private $id;
  46.  
  47. /**
  48.   * The name property.
  49.   * @var D
  50.   */
  51. private $d;
  52.  
  53. }
  54.  
  55. class D {
  56.  
  57. /**
  58.   * The id property.
  59.   * @var int
  60.   */
  61. private $id;
  62.  
  63. /**
  64.   * The name property.
  65.   * @var C
  66.   */
  67. private $c;
  68. }
  69.  
  70. //-------------------------------------------
  71. // One-to-one binavigable with 1 key
  72. //-------------------------------------------
  73.  
  74. class E {
  75.  
  76. /**
  77.   * The id property.
  78.   * @var int
  79.   */
  80. private $id;
  81.  
  82. /**
  83.   * The name property.
  84.   * @var F
  85.   */
  86. private $f;
  87.  
  88. }
  89.  
  90. class F {
  91.  
  92. /**
  93.   * The id property.
  94.   * @var int
  95.   */
  96. private $id;
  97.  
  98. /**
  99.   * The name property.
  100.   * @var E
  101.   */
  102. private $e;
  103. }
  104.  
  105. ?>

Le code de mapping relationnel

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <mapping xmlns="http://schema.emukina.fr/Mapping"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://schema.emukina.fr/Mapping http://schema.emukina.fr/Mapping.xsd"
  5. package="org.rapidoo.demo.onetoone">
  6.  
  7. <!-- One-to-one mono navigable with 1 key -->
  8. <class name="A" table="a">
  9. <id>
  10. <property name="id" column="id_a"/>
  11. </id>
  12. <one-to-one name="b" column="id_b" type="B" not-null="true"/>
  13. </class>
  14. <class name="B" table="b">
  15. <id>
  16. <property name="id" column="id_b"/>
  17. </id>
  18. </class>
  19.  
  20. <!-- One-to-one bi navigable with 2 keys -->
  21. <class name="C" table="c">
  22. <id>
  23. <property name="id" column="id_c"/>
  24. </id>
  25. <one-to-one name="d" column="id_d" type="D" not-null="true"/>
  26. </class>
  27. <class name="D" table="d">
  28. <id>
  29. <property name="id" column="id_d"/>
  30. </id>
  31. <one-to-one name="c" column="id_c" type="C" />
  32. </class>
  33.  
  34. <!-- One-to-one bi navigable with 1 key -->
  35. <class name="E" table="e">
  36. <id>
  37. <property name="id" column="id_e"/>
  38. </id>
  39. <one-to-one name="f" column="id_f_fk" type="F" not-null="true"/>
  40. </class>
  41. <class name="F" table="f">
  42. <id>
  43. <property name="id" column="id_f"/>
  44. </id>
  45. <one-to-one name="e" column="id_f" reverse-column="id_f_fk" type="E" not-null="true"/>
  46. </class>
  47.  
  48. </mapping>

Et enfin le code Sql

  1. ---------------------------------------------
  2. -- One-to-one mono navigable with 1 key
  3. ---------------------------------------------
  4.  
  5. CREATE TABLE `a` (
  6. `id_a` INT UNSIGNED AUTO_INCREMENT,
  7. `id_b` INT UNSIGNED NOT NULL,
  8. PRIMARY KEY(`id_a`),
  9. INDEX `IDX_a_b`(`id_b`) ,
  10. CONSTRAINT `FK_a_b` FOREIGN KEY (`id_b`) REFERENCES `b`(`id_b`)
  11. );
  12.  
  13. CREATE TABLE `b` (
  14. `id_b` INT UNSIGNED AUTO_INCREMENT,
  15. PRIMARY KEY(`id_b`)
  16. );
  17.  
  18. ---------------------------------------------
  19. -- One-to-one binavigable with 2 keys
  20. ---------------------------------------------
  21.  
  22. CREATE TABLE `c` (
  23. `id_c` INT UNSIGNED AUTO_INCREMENT,
  24. `id_d` INT UNSIGNED NOT NULL,
  25. PRIMARY KEY(`id_c`),
  26. INDEX `IDX_c_d`(`id_d`) ,
  27. CONSTRAINT `FK_c_d` FOREIGN KEY (`id_d`) REFERENCES `d`(`id_d`)
  28. );
  29.  
  30. CREATE TABLE `d` (
  31. `id_d` INT UNSIGNED AUTO_INCREMENT,
  32. `id_c` INT UNSIGNED NULL,
  33. PRIMARY KEY(`id_d`),
  34. INDEX `IDX_d_c`(`id_c`) ,
  35. CONSTRAINT `FK_d_c` FOREIGN KEY (`id_c`) REFERENCES `c`(`id_c`)
  36. );
  37.  
  38. ---------------------------------------------
  39. -- One-to-one binavigable with 1 key
  40. ---------------------------------------------
  41.  
  42. CREATE TABLE `e` (
  43. `id_e` INT UNSIGNED AUTO_INCREMENT,
  44. `id_f_fk` INT UNSIGNED ,
  45. PRIMARY KEY(`id_e`),
  46. INDEX `IDX_e_f`(`id_f_fk`) ,
  47. CONSTRAINT `FK_e_f` FOREIGN KEY (`id_f_fk`) REFERENCES `f`(`id_f`)
  48. );
  49.  
  50. CREATE TABLE `f` (
  51. `id_f` INT UNSIGNED AUTO_INCREMENT,
  52. PRIMARY KEY(`id_f`)
  53. );

mercredi 14 janvier 2009

Flampy Is Not Dead !!! - Avancement Janvier 2009

Et non Flampy n'est pas mort, même s'il est vrai que je n'y ai pas touché depuis cet été !!!

Voici le bilan :

  • Génération du code des opérations pour chaque chaque classe.
  • Nettoyage du code du générateur (c'est un peu le bronx).
  • Explication des 2 types de layout et activation du bouton radio...
  • Packaging de Flampy v0.2
  • Coder la génération des schémas XML (*.xsd)
  • Coder la génération des fichiers de description des services web (*.wsdl)
  • Coder la génération du fichier de mapping
  • Coder les association many-to-one et la génération via MDA
  • Coder la gestion des tests lien
  • Coder la création du script d'initialisation Sql
  • Achever l'ORM de Flampy en gérant les différents types d'association
  • Intégration de amfphp pour la gestion des Remote Object ou la version packagé avec Zend ou d'une version hybride

Le framework va encore évoluer mais je peux déjà l'utiliser pour des petits projets.