Problème Symfony ou Doctrine ?
Voila un moment déjà que je suis sur un projet en symfony, et me voila confronté a un problème que je ne m'explique pas, je vous passe tout le contexte de l'application les seules point à savoir étant que j'ai une variable $prec_lundi qui représente le lundi de la semaine précédente et d'autre part je dispose d'une BDD dans laquelle figure les tables :
- COURS
- PLAGE
- DECLARATION_PLAGE
avec tous les attributs qui leurs son propres.
L'objectif est d'obtenir un tableau dans lequel figure les plages déclaré par le formateur entre un jour X et un jour Y ainsi que l'état des-dites plages horaires.
Pour ce faire j'utilise le code suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
$q1 = Doctrine_Query::create()
->select("p.DATEPLAGE AS date, p.HEUREDEBUTPLAGE AS heure, d.IDFORMATEUR AS idFormateur, d.IDETATPLAGEDECLAREE AS etat, c.DUREECOURS AS coursDuree, c.FOR_IDFORMATEUR AS coursIdFormateur")
->from("PLAGE p")
->leftJoin("p.COURS c ON c.IDPLAGE=p.IDPLAGE")
->leftJoin("p.DECLARATION_PLAGE d ON d.IDPLAGE=p.IDPLAGE")
->where("d.IDFORMATEUR=".$sf_user->getAttribute('IDFORMATEUR')."")
->andWhere("p.DATEPLAGE >= '".date("Y-m-d", $this->prec_lundi)."'")
->andWhere("p.DATEPLAGE <= '".date("Y-m-d", $this->prec_lundi+(5*24*3600) )."'")
->andWhere("p.HEUREDEBUTPLAGE >= '8:00:00'")
->andWhere("p.HEUREDEBUTPLAGE <= '21:00:00'")
->orderBy("date, heure");
$coll1 = $q1->execute();
$this->res1 = $coll1->toArray(); |
Certes la requête n'est pas des plus courte mais elle est claire, pour vérifier la justesse de ma requête je l'ai testé sur ma BBD en ligne de commande et le retour attendu est bien là au contraire, doctrine me renvoie une collection avec des éléments contenu mais lorsque je souhaite récupérer un tableau à partir de cette collection ma variable $res1 est tous simplement égale a Array()
Ma question est de savoir pourquoi en Mysql j'obtiens le bon résultat alors qu'avec Doctrine+Symfony je me retrouve avec rien ou pas vraiment puisqu'un tableau vide ce n'est pas rien ...
Merci de votre aide et de vos réponses.
A tout hasard j'ai fait un petit symfony cc et j'ai actualisé ma page et la le problème semble "s'éclaircir" par le message d'erreur suivant :
Citation:
500 | Internal Server Error | Doctrine_Record_UnknownPropertyException
Unknown record property / related component "IDPLAGE" on "PLAGE"
Relation ou propriété inconnu 8O cette erreur me semble des plus incongrue car suite à la récupération de la requete générée avec un
Code:
echo $q1->getSql();
et le teste de celle-ci dans mon terminal Mysql j'obtiens le tableau que je souhaite ... je me pose la question si Doctrine effectue correctement le mapping de relation à partir d'une BDD existante ... la BDD étant fournie de plus de 100 tables j'ai très peu envie de réécrire toutes les relations à la main :bug:.
Informations complémentaires
Merci de ta réponse Muspil, je vais tenté d'utiliser directement la collection au lieu d'utiliser un tableau.
Ce tableau doit représenté les plages horaires de disponibilité du formateur a savoir qu'une plage a une durée de 30min et que dans ma vue j'affiche un tableau de 6 jours allant de 8h à 21h par jour dans lequel je met en couleur les plages déclarée par le formateur.
Il me faut également l'état de la plage puisqu'elle en à 3 :
- Indisponible => je fais une case vide
- Disponible => je fais une case verte
- Disponible sous conditions => je fais une case bleue
Bien entendu le formateur peu mettre a jour ses disponibilité en cliquant sur les cases chaque cases de mon tableau afficher représentant une plage horaire de 30min.
Voici les tables de mon schéma concerné (le schéma n'est pas au complet les autres tables n'étant pas utiles je ne les ais pas mises)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
|
ETAT_SESSION:
tableName: ETAT_SESSION
columns:
idetatsession:
type: integer(8)
primary: true
autoincrement: true
libelleetatsession:
type: string(255)
notnull: true
descriptionetatsession: string(2147483647)
FORMATEUR:
tableName: FORMATEUR
columns:
idformateur:
type: integer(8)
primary: true
autoincrement: true
idtiers:
type: integer(8)
notnull: true
loginutilisateur: string(255)
descriptionformateur: string(2147483647)
commentaireformateur: string(2147483647)
relations:
TIERS:
local: IDTIERS
foreign: IDTIERS
type: one
UTILISATEUR:
local: LOGINUTILISATEUR
foreign: LOGINUTILISATEUR
type: one
COURS:
tableName: COURS
columns:
idcours:
type: integer(8)
primary: true
autoincrement: true
idplage:
type: integer(8)
notnull: true
idsessionsousmodule:
type: integer(8)
notnull: true
dureecours:
type: integer(4)
notnull: true
estactivecours:
type: integer(1)
notnull: true
idformateur: integer(8)
for_idformateur: integer(8)
idville: integer(8)
idsalle: integer(8)
dateaffectationcours: date(25)
heureaffectationcours: time(25)
descriptioncours: string(2147483647)
adressecours: string(255)
commentairecours: string(2147483647)
relations:
SALLE:
local: IDSALLE
foreign: IDSALLE
type: one
VILLE:
local: IDVILLE
foreign: IDVILLE
type: one
PLAGE:
local: IDPLAGE
foreign: IDPLAGE
type: one
FORMATEUR:
local: FOR_IDFORMATEUR
foreign: IDFORMATEUR
type: one
SESSION_DE_SOUS_MODULE:
local: IDSESSIONSOUSMODULE
foreign: IDSESSIONSOUSMODULE
type: one
FORMATEUR_6:
class: FORMATEUR
local: IDFORMATEUR
foreign: IDFORMATEUR
type: one
DECLARATION_PLAGE:
tableName: DECLARATION_PLAGE
columns:
iddeclarationplage:
type: integer(8)
primary: true
autoincrement: true
idformateur:
type: integer(8)
notnull: true
idplage:
type: integer(8)
notnull: true
idetatplagedeclaree:
type: integer(8)
notnull: true
datedeclarationplage:
type: date(25)
notnull: true
heuredeclarationplage:
type: time(25)
notnull: true
relations:
ETAT_PLAGE_DECLAREE:
local: IDETATPLAGEDECLAREE
foreign: IDETATPLAGEDECLAREE
type: one
PLAGE:
local: IDPLAGE
foreign: IDPLAGE
type: one
FORMATEUR:
local: IDFORMATEUR
foreign: IDFORMATEUR
type: one
UTILISATEUR:
tableName: UTILISATEUR
columns:
loginutilisateur:
type: string(255)
primary: true
passutilisateur:
type: string(255)
notnull: true
compteutilisateuractif:
type: integer(1)
default: '0'
idclient: integer(8)
idpartenaire: integer(8)
idauditeur: integer(8)
idorganismeaccueil: integer(8)
idformateur: integer(8)
commentaireutilisateur: string(2147483647)
relations:
AUDITEUR:
local: IDAUDITEUR
foreign: IDAUDITEUR
type: one
CLIENT:
local: IDCLIENT
foreign: IDCLIENT
type: one
FORMATEUR:
local: IDFORMATEUR
foreign: IDFORMATEUR
type: one
ORGANISME_ACCUEIL:
local: IDORGANISMEACCUEIL
foreign: IDORGANISMEACCUEIL
type: one
PARTENAIRE:
local: IDPARTENAIRE
foreign: IDPARTENAIRE
type: one
PLAGE:
tableName: PLAGE
columns:
idplage:
type: integer(8)
primary: true
autoincrement: true
dateplage:
type: date(25)
notnull: true
heuredebutplage:
type: time(25)
notnull: true
ETAT_PLAGE_DECLAREE:
tableName: ETAT_PLAGE_DECLAREE
columns:
idetatplagedeclaree:
type: integer(8)
primary: true
autoincrement: true
libelleetatplagedeclaree:
type: string(255)
notnull: true |
Voila si cela peut t'aider a comprendre ma question et ce que je veux faire avec ces tables.
@Muspil : Après avoir essayer ta solution mon affichage fonctionne tant qu'aucune plage n'est déclaré, dès que je tente de visualisé une semaine avec des plages déclarées l'erreur cité dans mon précédent post ...
Citation:
500 | Internal Server Error | Doctrine_Record_UnknownPropertyException
Unknown record property / related component "IDPLAGE" on "PLAGE"
apparait. La relation de Plage a Declaration_Plage est bien une "hasMany" et une "hasOne" en sens inverse, ma relation est donc bien mappée.