public function detectCallableForField(FieldInterface $field) { $type = null; if (!$field instanceof DbField) { return false; } if ($field->isType('manytomany')) { /* @var $field \Dewdrop\Db\ManyToMany\Field */ $filter = new ManyToManyFilter($field->getManyToManyRelationship()); } else { if ($field->isType('reference')) { $type = 'Reference'; } elseif ($field->isType('boolean')) { $type = 'Boolean'; } elseif ($field->isType('date', 'timestamp')) { $type = 'Date'; } elseif ($field->isType('integer', 'float')) { $type = 'Numeric'; } elseif ($field->isType('clob', 'text')) { $type = 'Text'; } else { return false; } if ($field instanceof EavField) { $tableName = $field->getName(); $fieldName = 'value'; } else { $tableName = $field->getTable()->getTableName(); $fieldName = $field->getName(); } $className = '\\Dewdrop\\Db\\Select\\Filter\\' . $type; $filter = new $className($tableName, $fieldName); } return function ($helper, $select, $conditionSetName, $queryVars) use($filter) { return $filter->apply($select, $conditionSetName, $queryVars); }; }