Generar modelos a partir de bases de datos con devtools

Nota

En esta parte, tu proyecto ya está creado.
Si no tienes una base de datos mysql a mano, puedes descargarte ésta: messagerie.sql

Configuración

Compruebe la configuración de la base de datos con el programa de consola devtools:

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

Nota

El archivo de configuración se encuentra en app/config/config.php.

Cambiar la configuración de la base de datos para utilizar la base de datos messagerie:

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

Generación

Para generar todos los modelos, utilice el comando all-models:

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

Eso es todo. |br|Los modelos están generados y operativos.

Nota

Es posible generar modelos automáticamente al crear un proyecto con la opción -m para modelos y -b para especificar la base de datos:

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

Comprobación de

Modelos de meta-datas

Obtener los metadatos de todos los modelos creados:

Ubiquity info:models

Para un modelo preciso:

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

Información sobre la validación de modelos

Obtener las reglas de validación del modelo Usuario:

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

Sobre un miembro en particular (correo electrónico):

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

Clases generadas

Las clases generadas se encuentran en la carpeta app/models, si no se ha modificado la configuración de mvcNS.models.

Nota

Si quiere saber más sobre:

  • reglas de asignación object/relatonal, consulte la sección ORM part

  • consulta y persistencia de datos, véase DAO part

La clase 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}

Importante

Cualquier modificación en las clases (código o anotaciones) requiere que se tenga en cuenta el reinicio de la caché.

Ubiquity init-cache -t=models

Consultas

Se generan las clases, y también la caché de modelos.
Llegados a este punto, ya podemos consultar la base de datos en modo consola, para hacernos una idea de las posibilidades del DAO part:

Consultas clásicas

Conseguir todos los grupos:

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

Con su organización:

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

Una consulta más completa:
Buscar grupos con la palabra «list» en su email, mostrando el nombre, email y organización de cada grupo:

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

Obtención de un User por id:

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

uQueries

Las UQueries son especiales porque permiten establecer criterios sobre los valores de los miembros de los objetos asociados:

Buscar grupos con un usuario llamado Shermans

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

Podemos verificar que Shermans pertenece al grupo Auditeurs

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

Lo mismo ocurre con una consulta parametrizada:

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