В связи с тем что внутри метода getList создается новый Query и в итоге возвращается готовый sql запрос, есть невероятная проблема расширения параметров при наследовании DataManager.
Мне вот для sphinx потребовался новый параметр 'match', и чтобы мне туда его засунуть, мне нужно полностью переписать метод getList, т.е. скопипастить все что есть в исходниках этого метода и где-то в серединку добавить 'match'. А должно быть как-то так:
public static function getList(array $parameters = [])
{
$query = parent::getList($parameters);
if (isset($parameters['match']))
{
$query->setMatch($parameters['match']);
}
return $query;
} |
С учетом того что эта функция должна возвращать Result, а не Query, нужно добавить внутри хотя бы один метод, вместо кучи кода обработки параметров, т.е. сделать хотя бы так:
public static function getList(array $parameters = [])
{
return static::buildQuery($parameters)->exec();
}
public/*protected?*/ static function buildQuery(array $parameters = [])
{
$query = static::query();
// тут текущий код
return $query;
}
|
Тогда в метод buildQuery можно будет без проблем добавить любой новый параметр.
А в данный момент нужно именно копипастить код, да и еще в 17 версии появился ключ 'cache', и вот допустим у меня старая версия ядра, и если мне нужен этот ключ 'cache' в моем DataManager для sphinx, уже после обновления, то мне надо опять скопипастить новые исходники.