Le contexte : une application PHP/MySQL, un champ BLOB dans l’application avec Symfony. Par défaut, nous avions laissé Propel pour faire nos tests.
Le souci d’un champ BLOB est sa contenance. Lorsque je veux lister tous mes enregistrements, si un des champs est BLOB, il est difficile de l’afficher directement dans le listing. Au niveau de la modélisation, j’ai donc intérêt à prévoir que ce champ sera ramené plus tard.
Symfony-Propel me propose une technique : préciser dans le YAML que ce champ sera rapporté à la demande.
commentaires_longs: {type: blob, lazyLoad: true}
Ensuite, lors de la récupération, j’ai tout intérêt à proposer un lien vers le contenu long (en saupoudrant éventuellement d’Ajax pour fournir à l’utilisateur une prévisualisation au survol). Il serait en effet trop coûteux de rapporter ce champ, en performance et en place sur la page web.
Au moment où je souhaite obtenir le commentaire, je pourrais faire :
$criteria->clearSelectColumns();
$criteria->addSelectColumn(ObjetPeer::COMMENTAIRES_LONG);
$rs =ObjetPeer::doSelectStmt($criteria);
Attention : actuellement, la méthode est doSelectStmt() et plus doSelectRS(), ne vous faites pas avoir.
Ensuite, vous récupérez un objet de la classe PDOStatement, il faut ensuite l’exploiter avec un fetch().
Au niveau de la conception de l’application, on peut imaginer mettre ces champs longs dans des tables séparées, puisqu’il sera rare qu’on les reprenne en même temps que les autres.

No Comments Yet