[Doctrine] Oracle 9ir2 Clob
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 :
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
|
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);
}
}
?> |
J'aurais loupé quelque chose ?
Toute aide sera bienvenue !!
;)