Bonjour,
Voilà un problème sur lequel je bloque depuis plusieurs jours...
J'ai déclaré dans mon shema yaml un champ de type string sans contrainte de longueur.
la table créée dans Oracle par doctrine définit pour ce champ le type CLOB
J'ai donc crée un listener héritant de Doctrine_Record_Listener afin de récupérer le flux du champ et de le modifier en string à la volée :
J'aurais loupé quelque chose ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 function fixClob_recursive(&$array, &$table) { if (!is_null($array)) { $columns = $table->getColumns(); $relations = $table->getRelations(); foreach ($array as $k => &$v) { if (is_array($v)) { fixClob_recursive($v, $relations[key($v)]); } else { if (array_key_exists(strtolower($k), $columns) && ($columns[strtolower($k)]['type'] == 'string' && empty($columns[strtolower($k)]['length']))) { /* le bloc ci-dessous fonctionne bien, il m'affiche un string */ var_dump(stream_get_contents($v)); /* ce bloc ne fonctionne pas, page blanche pas de trace... */ $array[$k]= stream_get_contents($v); } } } unset($columns, $relations); } } class OracleFixHydratationListener extends Doctrine_Record_Listener { public function preHydrate(Doctrine_Event $event) { $datas = $event->data; $table = $event->getInvoker(); fixClob_recursive($datas, $table); /* ce debug me sort le flux directement ( ressource id #XX ) */ echo "<pre>"; print_r($datas); echo "</pre>"; //*/ $event->data = $datas; unset($datas, $table); } } ?>
Toute aide sera bienvenue !!
Partager