protected function _operators($field, $operators, $schema)
{
$castOpts = compact('schema');
$castOpts += array('first' => true, 'database' => $this, 'wrap' => false);
$cast = function ($key, $value) use(&$schema, &$castOpts) {
return $schema ? $schema->cast(null, $key, $value, $castOpts) : $value;
};
foreach ($operators as $key => $value) {
if (!isset($this->_operators[$key])) {
$operators[$key] = $cast($field, $value);
continue;
}
$operator = $this->_operators[$key];
if (is_array($operator)) {
$operator = $operator[is_array($value) ? 'multiple' : 'single'];
}
if (is_callable($operator)) {
return $operator($key, $value, compact('castOpts', 'field'));
}
unset($operators[$key]);
$operators[$operator] = $cast($field, $value);
}
return $operators;
}