Génération des models depuis la base de données avec les devtools

Note

Dans cette partie, votre projet est déjà créé.
Si vous n’avez pas de base de données mysql sous la main, vous pouvez télécharger celle-ci : messagerie.sql

Configuration

Vérifiez la configuration de la base de données avec les devtools en mode console :

Ubiquity config database
../../_images/check-config.png

Note

Le fichier de configuration est situé dans app/config/config.php.

Changez la configuration de la base de données pour utiliser la base de données messagerie :

Ubiquity config:set --database.dbName=messagerie
../../_images/update-dbName.png

Génération

Pour générer tous les modèles, utilisez la commande all-models :

Ubiquity all-models
../../_images/db-created.png

C’est tout !
Les modèles sont générés et opérationnels.

Note

Il est possible de générer des modèles automatiquement lors de la création d’un projet avec l’option -m pour les modèles et ``-b`”” pour spécifier la base de données :

Ubiquity new quick-start -a  -m -b=messagerie

Vérifications

Meta-datas des models

Pour obtenir les métadonnées de tous les modèles créés :

Ubiquity info:models

Pour un modèle particulier :

Ubiquity info:models -m=Groupe
../../_images/model-metas.png

Informations relatives à la validation

Pour obtenir les règles de validation pour le modèle User :

Ubiquity info:validation -m=User
../../_images/infos-validation-user.png

Sur un membre particulier (email) :

Ubiquity info:validation -m=User -f=email
../../_images/infos-validation-user-email.png

Classes générées

Les classes générées sont situées dans le dossier app/models, si la configuration de mvcNS.models n’a pas été modifiée.

Note

Si vous voulez en savoir plus à ce sujet :

  • règles de mappage object/relational, voir le ORM part

  • interrogation de données et persistance, voir DAO part

La classe User :

app/models/User.php
 1namespace models;
 2
 3use Ubiquity\attributes\items\Id;
 4use Ubiquity\attributes\items\Column;
 5use Ubiquity\attributes\items\Validator;
 6use Ubiquity\attributes\items\ManyToOne;
 7use Ubiquity\attributes\items\JoinColumn;
 8use Ubiquity\attributes\items\OneToMany;
 9use Ubiquity\attributes\items\ManyToMany;
10use Ubiquity\attributes\items\JoinTable;
11
12class User{
13
14   #[Id]
15   #[Column(name: 'id', nullable: false, dbType: 'int(11)')]
16   #[Validator('id', constraints: ['autoinc'=>true])]
17   private $id;
18
19   #[Column(name: 'firstname, nullable: false, dbType: 'varchar(65)')]
20   #[Validator('length', constraints: ['max'=>65, 'notNull'=>true])]
21   private $firstname;
22
23   #[Column(name: 'lastname, nullable: false, dbType: 'varchar(65)')]
24   #[Validator('length', constraints: ['max'=>65, 'notNull'=>true])]
25   private $lastname;
26
27   #[Column(name: 'email', nullable: false, dbType: 'varchar(255)')]
28   #[Validator('email', constraints: ['notNull'=>true])]
29   #[Validator('length', constraints: ['max'=>255])]
30   private $email;
31
32   #[Column(name: 'password', nullable: true, dbType: 'varchar(255)')]
33   #[Validator('length', constraints: ['max'=>255])]
34   private $password;
35
36   #[Column(name: 'suspended', nullable: true, dbType: 'tinyint(1)')]
37   #[Validator('isBool')]
38   private $suspended;
39
40   #[ManyToOne]
41   #[JoinColumn(className: 'models\\Organization', name: 'idOrganization', nullable: false)]
42   private $organization;
43
44   #[OneToMany(mappedBy: 'user', className: "models\\Connection")]
45   private $connections;
46
47   #[ManyToMany(targetEntity: 'models\\Groupe', inversedBy: 'users')]
48   #[JoinTable(name: 'groupeusers')]
49   private $groupes;
50}

Important

Toute modification sur les classes (code ou annotations) nécessite la réinitialisation du cache.

Ubiquity init-cache -t=models

Interrogations

Les classes sont générées, et le cache des models également.
A ce stade, nous pouvons interroger la base de données en mode console, pour avoir une idée des possibilité de la partie DAO:

Interrogations classiques

Obtenir tous les groupes :

Ubiquity dao getAll -r=Groupe
../../_images/get-all.png

Avec leur organisation :

Ubiquity dao getAll -r=Groupe -i=organization
../../_images/get-all-groupes-orga.png

Une requête plus complète :
Rechercher les groupes ayant le mot « list «  dans leur email, en affichant le nom, l’email et l’organisation de chaque groupe :

Ubiquity dao getAll -r=Groupe -c="email like '%liste%'" -f=email,name,organization -i=organization
../../_images/query-groupes-orga.png

Obtenir un User à partir de son id :

Ubiquity dao getOne -r=User -c="id=4"
../../_images/get-one-user.png

uQueries

Les UQueries sont particulières car elles permettent de définir des critères sur les valeurs des membres des objets associés :

Rechercher les groupes avec un utilisateur de nom Shermans.

Ubiquity dao uGetAll -r=Groupe -c="users.lastname='Shermans'" -i=users
../../_images/groupes-sherman.png

Nous pouvons vérifier que Shermans appartient au groupe Auditeurs.

Ubiquity dao uGetAll -r=User -c="groupes.name='Auditeurs' and lastname='Shermans'" -i=groupes
../../_images/shermans-groupe.png

La même chose avec une requête paramétrée :

Ubiquity dao uGetAll -r=User -c="groupes.name= ? and lastname= ?" -i=groupes -p=Auditeurs,Shermans