Вы можете добавить пользовательские поля поиска в ModelAdmin через getSearchContext()
и настроить запрос на основе их с помощью getList()
. См. в этом разделе документации SilverStripe.
Вот пример исключения результатов, у которых значение CreatedAt ниже даты, указанной в поле поиска (при условии, что ваш ModelAdmin управляет только MemberBonus):
getFields()->push(new DatetimeField('q[CreatedAfter]', 'Created After'));
return $context;
}
public function getList()
{
$list = parent::getList();
$params = $this->getRequest()->requestVar('q');
if (!empty($params['CreatedAfter'])) {
$list = $list->exclude('CreatedAt:LessThan', $params['CreatedAfter']);
}
return $list;
}
}
Чтобы получить работающий диапазон, достаточно нужно добавить поле CreatedBefore и фильтр.
read()
низкий уровень, освободил буфер чтение. Это делает запрос целевой системы к UNIX.
fread()
часть библиотеки C и обеспечивает буферизованные чтения. Это обычно реализуется путем вызова read()
для заполнения его буфера.
Семья read()
-> open
, close
, read
, write
семья fread()
-> fopen
, fclose
, fread
, fwrite
read
syscall, тогда как fread
функция в стандартной библиотеке C.
Поскольку я помню это read()
, API уровня не делают буферизации - поэтому, если Вы read()
1 байт за один раз у Вас будет огромный штраф перфекта по сравнению с выполнением того же самого с fread()
. fread()
вытянет блок и скупо выдаст его, как Вы просите его. read()
спадет до ядра для каждого вызова.