ModelFilter - фильтр записей
Зависимости
- нет зависимостей
Компонент добавляет на сайт модель ModelFilter, которая позволяет реализовать лёгкий и быстрый фильтр элементов таблицы.
Пример использования
Допустим у нас есть модель TestModel, с различными полями. Мы добавляем в неё публичную переменную $filter и инициализируем её в конструкторе:
class TestModel extends Model
{
public $filter;
public function __construct($id = NULL)
{
global $g_databases;
parent::__construct($g_databases->db, 'model_test', 'id', $id, false);
$this->filter = new ModelFilter($g_databases->db, $this->table);
}
public function CreateTable()
{
static $arrCreates = array();
if (!isset($arrCreates[$this->table]))
{
$this->db->query("CREATE TABLE IF NOT EXISTS ?#
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`text1` varchar(256) CHARACTER SET utf8 NOT NULL,
`text2` varchar(256) CHARACTER SET utf8 NOT NULL,
`int` int(11),
`flt` float,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1",
$this->table);
}
}
// ...
}
Теперь через эту переменную $filter можно осуществлять поиск нужных элементов:
$testModel = new TestModel();
$filter = array();
$filter["int"] = array('min' => 3007); // все элементы у которых 'int' больше-равно 3007
$ids = $testModel->filter->Filter($filter, 2, 3, "text1"); // вернуть 3 элемента начиная с 2. Упорядочить записи по полю text1
$ids = $testModel->filter->FilterTotal($filter); // общее количество элементов
Другие примеры задания фильтра:
$filter = array();
// все элементы у которых 'int' равно 3002 или 3005 или 3007 или 3008
$filter["int"] = array(3002, 3005, 3007, 3008);
$filter = array();
// все элементы у которых либо text1 либо text2 равны ABC
$filter["text1,text2"] = "ABC";
$filter = array();
// все элементы у которых text1 равно ABC, а text2 равно DEF
$filter["text1"] = "ABC";
$filter["text2"] = "DEF";
$filter = array();
// все элементы у которых либо text1 либо text2 содержат подстроку "а20" либо подстроку "text"
$filter["text1,text2"] = array("а20", "%text%");
Примеры сортировки:
// Вернуть и упорядочить записи по полю text1
$ids = $testModel->filter->Filter($filter, 0, 99, "text1");
// Вернуть и упорядочить записи по полю text1 и полю text2
$ids = $testModel->filter->Filter($filter, 0, 99, array("text1", "text2"));
// Вернуть и упорядочить записи по полю text1 и полю text2, но упорядочить все в обратном порядке
$ids = $testModel->filter->Filter($filter, 0, 99, array("text1", "text2"), true);
// Вернуть и упорядочить записи по полю text1 в обратном порядке и полю text2 в прямом порядке.
$ids = $testModel->filter->Filter($filter, 0, 99, array("text1", "text2"), "text1");
// Вернуть и упорядочить записи по полю text1 в обратном порядке и полю text2 в в обратном порядке (эквивалент примера номер 3)
$ids = $testModel->filter->Filter($filter, 0, 99, array("text1", "text2"), array("text1", "text2"));
Если нужно вернусть все элементы, то массив $filter просто должен быть пуст.