RedBean : déterminer si un type de bean possède une propriété

L'un des gros avantages de l'ORM PHP RedBean est la grande souplesse de son fonctionnement : vous n'avez jamais à vous soucier du schéma de votre base de données avant la mise en production, celui-ci étant généré au fur et à mesure du développement et des requêtes qui y sont effectuées par son intermédiaire. Toutefois, cet avantage peut devenir handicapant si, pour une raison ou un autre, vous avez besoin de savoir si tel ou tel type de "bean" possède (potentiellement, selon le schéma de la table correspondante) une propriété donnée.

Je vous propose aujourd'hui de surcharger la classe RedBean_Facade (R de son petit nom lors de l'utilisation de l'outil) afin de lui ajouter cette possibilité :

<?php

namespace My\Name\Space;

class RedBean extends \RedBean_Facade
{
public static function typeHasField($type, $field)
{
//return !! self::getCell('SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ? AND COLUMN_NAME = ?', array($type, $field));

// Mettons plutôt en oeuvre les moyens mis à disposition par RedBean, afin de ne pas se limiter à MySQL
try {
$columns = self::getColumns($type);
return isset($columns[$field]);
} catch (\RedBean_Exception_SQL $e) {
// La table n'existe pas encore
return false;
}
}
}

Cette nouvelle méthode s'utilisera tout bêtement ainsi :

use My\Name\Space\RedBean as R;

$type = $bean->getMeta('type'); // si vous ne le connaissez pas directement

if (R::typeHasField($type, 'fieldname')) {
// ...

Cette solution a été testée et fonctionne sur une base de données MySQL.