Question de noob sur les models [cakephp] - PHP - Programmation
Marsh Posté le 03-02-2015 à 14:36:48
et le $this->B->find('all') me retourne de la merde...
Marsh Posté le 03-02-2015 à 16:55:14
Pour B, utiliser hasMany plutôt que belongsTo, ça n'aiderait pas ?
(Je suis pas un spécialiste, c'est juste une piste de réflexion)
Marsh Posté le 03-02-2015 à 17:09:51
j'essaie ca demain, là c'est l'heure de partir du boulot, merci pour ton aide
Marsh Posté le 03-02-2015 à 17:30:49
Essaie en augmentant le niveau de récursivité de ta requête
Marsh Posté le 04-02-2015 à 15:09:09
La récursivité ne change rien
Ca continue là : http://forum.cakephp-fr.org/viewto [...] 803#p33803
Marsh Posté le 05-02-2015 à 15:22:58
'Solution' trouvée, enfin plutôt quelque chose qui fonctionne... (voir lien), si un pro du cake pouvait valider que c'est la bonne ou me jeter des cailloux
Merci
Marsh Posté le 05-02-2015 à 15:32:10
C'est donc ce que je disais non !?
kao98 a écrit : Pour B, utiliser hasMany plutôt que belongsTo, ça n'aiderait pas ? |
Marsh Posté le 08-02-2015 à 20:31:54
Heu oui Mais je trouve ma solution très sale pour deux simples relations de 2 clés étrangères... je trouve ca pas très "propre"...
Marsh Posté le 08-02-2015 à 22:43:37
spark a écrit : Heu oui Mais je trouve ma solution très sale pour deux simples relations de 2 clés étrangères... je trouve ca pas très "propre"... |
Et pourquoi tu trouve ça pas très propre ?
Tu aurais voulu faire comment ?
Marsh Posté le 09-02-2015 à 13:44:23
kao98 a écrit : |
A.php:
Code :
|
B.php:
Code :
|
C'est le résultat que j'ai actuellement. Bon ça me retourne bien ce que je veux niveau données, mais je trouve que mon B.php, c'est du gros bidouillage.
Pour moi ce n'est pas une vraie relation. Je voyais plutôt 2 belongsTo correspondant à mes 2 hasOne, histoire que l'ORM sache faire les jointures tout seul comme un grand, là je trouve ça excessivement compliqué juste pour deux relations 1-n sur la même table...
Marsh Posté le 09-02-2015 à 14:18:20
Et du coup, tu n'as pas l'impression que c'est ton modèle qui est foireux en cause ?
La condition de ta relation hasMany de ton entité B reflète exactement ton modèle.
Ton modèle n'est pas normalisé. Ne soit pas surpris que ton ORM ne soit pas adapté !
Edit : le modèle n'est pas forcément foireux. Je ne connais pas ton projet, je ne peux pas me prononcer à ce sujet. Mais il n'est pas normalisé, ce qui n'est pas forcément pas correct. C'est juste pas normalisé.
Marsh Posté le 09-02-2015 à 15:04:11
Ben c'est simple, ma table A, c'est des services, ma table B, c'est des serveurs.
Un service à 1 serveur de TP, et 1 serveur de Batch; d'où ma modélisation :
Code :
|
et
Code :
|
avec
Code :
|
Je pense que c'est bien modélisé ou alors faut qu'on m'explique
Après, je peux passer par une autre table et faire du ternaire, mais vu que j'ai que 2 serveurs par service, c'est pas la peine... Et dans ma table serveurs, j'ai pas que du TP ou du Batch, j'ai de la BDD et autres...
Et pis même, un hasOne devrait avoir un belongsTo, enfin dans la doc c'est marqué comme ça
Marsh Posté le 09-02-2015 à 15:50:49
spark a écrit : Ben c'est simple, ma table A, c'est des services, ma table B, c'est des serveurs.
|
Dans une version normalisée, il y aurait bel et bien 3 tables.
Service, Server, et ServiceHasServer(ServiceId, ServeurId, type).
BelongsTo, c'est pour une relation 1 => n, du côté du n. hasMany, c'est pour du côté du 1.
Exemle, si dans ton exemple, on avait eu 1 service pour n serveurs, mais un serveur pour 1 service. 1 service hasMany servers, 1 server belongsTo un service. La relation hasMany permet de retrouver l'ensemble des serveurs d'un service. BelongsTo permet de retrouver le service auquel appartient un serveur.
Dans cakePhp, la relation hasOne est plutôt dédiée aux relations 1 => 1.
Mais tu ne rentres pas dans ces cas là puisque tu as une relation 2 => n, que tu as dé-normalisé (donc un cas spécifique).
Marsh Posté le 09-02-2015 à 15:59:19
merci pour tes éclaircissements , je dormirai moins bête ce soir
Marsh Posté le 09-02-2015 à 16:03:53
Je précise, si jamais c'est pas assez clair : ce n'est pas une mauvaise chose d'avoir dé-normalisé ! C'est une optimisation qui peut se justifier (ou pas) au sein de ton soft.
Si tu es sûr que tu n'auras toujours que 2 serveurs max par services, jamais un service n'en aura un 3ème, alors ton modèle se justifie
Marsh Posté le 10-02-2015 à 14:10:03
LE truc aussi, c'est que un serveur peut héberger soit du TP, soit du Batch, soit de la BDD, soit 1, 2 ou 3 de ces éléments, donc je ne peux pas avoir une table type_serveur, car il peut avoir plusieurs fonctions.
Genre dans mon appli, pour les batchs, c'est la meme machine pour tous les services d'une appli précise, mais ce n'est pas le cas pour une autre appli.
Marsh Posté le 10-02-2015 à 14:16:22
|
Modèliser en 4 tables : service, server, job, et ServiceHasServer(ServiceId, ServerId, JobId, Details[text])
C'est compliqué, mais au moins ça devrait pouvoir couvrir tous tes cas de figure. Et tu peux même avoir du blabla dans ton champ "details". Et ça te permet de sortir des listings dans tous les sens.
Un service peut avoir plusieurs serveurs, pour différents travaux
Un serveur peut être utilisé par plusieurs services, pour différents travaux
Tu peux même avoir un service qui utilise un serveur pour un job particulier, et le même serveur pour un autre type de job.
Bref, ça demande un petit "effort" de développement, mais une fois que c'est fait, tu es sûr de pouvoir tout faire avec un modèle de ce type sans être bloqué.
Marsh Posté le 03-02-2015 à 14:27:59
Hello tout le monde, j'ai un gros problème avec cakephp et je sent que je vais péter une pile
Pour faire simple, j'ai 2 tables A et B
as
===
id
name
b1_id
b2_id
et
bs
====
id
name
avec les relations
A.b1_id => B.id
et
A.b2_id => B.id
sous mysql, mes tables s'appellent 'as' et 'bs' pour respecter les conventions cakephp
Dans les tables, j'ai :
as
=====
1 - Ligne A1 - 1 - 2
2 - Ligne A2 - 2 - 3
3 - Ligne A3 - 3 - 4
4 - Ligne A4 - 4 - 5
bs
=====
1 - Ligne B1
2 - Ligne B2
3 - Ligne B3
4 - Ligne B4
5 - Ligne B5
J'ai fais mes controllers, mes views, et je voudrais juste que ca marche !!!,
Genre pour un
/A/view/3
, ca marche, mais j'ai l'impression que j'ai fais du bricolage , si qqn pouvait me dire si c'est juste ?
Modèle : A.php:
ca me retourne
Ce qui est plutot pas mal.
Par contre, dans le sens B vers A, mon belongsTo fait de la merde
Modèle B.php
Dans le controller view de B, je fais un
/B/view/3
Ca me donne ca:
Dans DebugKit :
mais je ne récupère qu'une ligne (normal avec le limit 1)
Alors que je voudrais toutes les lignes de A associés !!
Comment faire ? J'ai un peu l'impression de faire du bricolage alors que les relations entre les 2 tables restent très connes !!
Help !!
Message édité par spark le 03-02-2015 à 14:39:58
---------------
Un cycle complet sera une série de 100.