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
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
Generación
Para generar todos los modelos, utilice el comando all-models:
Ubiquity all-models
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
Información sobre la validación de modelos
Obtener las reglas de validación del modelo Usuario:
Ubiquity info:validation -m=User
Sobre un miembro en particular (correo electrónico):
Ubiquity info:validation -m=User -f=email
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:
La clase User:
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}
1namespace models;
2
3class User{
4 /**
5 * @id
6 * @column("name"=>"id","nullable"=>false,"dbType"=>"int(11)")
7 * @validator("id","constraints"=>array("autoinc"=>true))
8 */
9 private $id;
10
11 /**
12 * @column("name"=>"firstname","nullable"=>false,"dbType"=>"varchar(65)")
13 * @validator("length","constraints"=>array("max"=>65,"notNull"=>true))
14 */
15 private $firstname;
16
17 /**
18 * @column("name"=>"lastname","nullable"=>false,"dbType"=>"varchar(65)")
19 * @validator("length","constraints"=>array("max"=>65,"notNull"=>true))
20 */
21 private $lastname;
22
23 /**
24 * @column("name"=>"email","nullable"=>false,"dbType"=>"varchar(255)")
25 * @validator("email","constraints"=>array("notNull"=>true))
26 * @validator("length","constraints"=>array("max"=>255))
27 */
28 private $email;
29
30 /**
31 * @column("name"=>"password","nullable"=>true,"dbType"=>"varchar(255)")
32 * @validator("length","constraints"=>array("max"=>255))
33 */
34 private $password;
35
36 /**
37 * @column("name"=>"suspended","nullable"=>true,"dbType"=>"tinyint(1)")
38 * @validator("isBool")
39 */
40 private $suspended;
41
42 /**
43 * @manyToOne
44 * @joinColumn("className"=>"models\\Organization","name"=>"idOrganization","nullable"=>false)
45 */
46 private $organization;
47
48 /**
49 * @oneToMany("mappedBy"=>"user","className"=>"models\\Connection")
50 */
51 private $connections;
52
53 /**
54 * @manyToMany("targetEntity"=>"models\\Groupe","inversedBy"=>"users")
55 * @joinTable("name"=>"groupeusers")
56 */
57 private $groupes;
58}
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
Con su organización:
Ubiquity dao getAll -r=Groupe -i=organization
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
Obtención de un User por id:
Ubiquity dao getOne -r=User -c="id=4"
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
Podemos verificar que Shermans pertenece al grupo Auditeurs
Ubiquity dao uGetAll -r=User -c="groupes.name='Auditeurs' and lastname='Shermans'" -i=groupes
Lo mismo ocurre con una consulta parametrizada:
Ubiquity dao uGetAll -r=User -c="groupes.name= ? and lastname= ?" -i=groupes -p=Auditeurs,Shermans