Automatic DB Field Encryption in CakePHP

I’ve written the following behavior for a project I recently completed in Cake, and I thought it would be worth sharing:

class CryptableBehavior extends ModelBehavior {
var $settings = array();
 
function setup(&$model, $settings) {
if (!isset($this->settings[$model->alias])) {
$this->settings[$model->alias] = array(
'fields' => array()
);
}
 
$this->settings[$model->alias] = array_merge($this->settings[$model->alias], $settings);
}
 
function beforeFind(&$model, $queryData) {
foreach ($this->settings[$model->alias]['fields'] AS $field) {
if (isset($queryData['conditions'][$model->alias.'.'.$field])) {
$queryData['conditions'][$model->alias.'.'.$field] = $this->encrypt($queryData['conditions'][$model->alias.'.'.$field]);
}
}
return $queryData;
}
 
function afterFind(&$model, $results, $primary) [...]