ЗАГРУЗКА
Универсальный драйвер Кристалл для работы с базой данных:
Драйвер основан на цепочке запросов и относится к методу, соединяющему несколько методов, один за другим, каждый метод возвращает объект, который может поддерживать следующий метод, улучшая читабельность и упрощая код.
Чтобы получить новый экземпляр класса DatabaseQuery, необходимо использовать метод getQuery DatabaseDriver:
$db = Factory::getDbo();
$query = $db->getQuery(true);
						Чтобы запросить источник данных, мы можем вызвать несколько методов DatabaseQuery; эти методы инкапсулируют язык запросов источника данных (в большинстве случаев SQL), скрывая специфический синтаксис запроса от разработчика и увеличивая переносимость исходного кода.
Некоторые из наиболее часто используемых методов включают в себя: select, from, join, where, setLimit и order. Существуют также такие методы, как вставка insert, обновление update и удаление delete для изменения записей в хранилище данных. Объединяя эти и другие вызовы методов, мы можем создать практически любой запрос к нашему хранилищу данных без ущерба для переносимости кода.
Ниже приведен пример создания запроса к базе данных с использованием класса DatabaseQuery. Используя методы select, from, where,bind и order, можно создавать гибкие, легко читаемые и переносимые запросы:
// Получить соединение с БД.
$db = Factory::getDbo();
// Создаём новый объект запроса.
$query = $db->getQuery(true);
// Выберем все записи из таблицы clients, где ключ org_id = 1.
// Сортируем вывод по полю ordering.
$query->select($db->quoteName(array('id', 'profile_key', 'profile_value', 'ordering')));
$query->from($db->quoteName('#__clients'));
$query->where($db->quoteName('org_id') . ' = 1');
$query->order('ordering ASC'); // ASC - по возрастанию; DESC - по убыванию
// Используйте $query->order('RAND()'); для случайной выборки.
// Применим запрос, используя наш недавно заполненный объект запроса.
$db->setQuery($query);
// Загрузим результаты в виде списка объектов stdClass
// (дополнительные параметры для получения данных см. ниже).
$results = $db->loadObjectList();
					
						// Получить соединение с БД.
$db = Factory::getDbo();
// Создаём новый объект запроса.
$query = $db->getQuery(true);
$query
    ->select($db->quoteName(array('id', 'profile_key', 'profile_value', 'ordering')))
    ->from($db->quoteName('#__clients'))
    ->where($db->quoteName('org_id') . ' = 1')
    ->order('ordering ASC'); // ASC - по возрастанию; DESC - по убыванию
// Используйте $query->order('RAND()'); для случайной выборки.
// Применим запрос, используя наш недавно заполненный объект запроса.
$db->setQuery($query);
// Загрузим результаты в виде списка объектов stdClass
// (дополнительные параметры для получения данных см. ниже).
$results = $db->loadObjectList();
						<?php
				
use Kristall\Database\ParameterType;
// Получить соединение с БД.
$db = Factory::getDbo();
// Создаём новый объект запроса.
$query = $db->getQuery(true);
$orgid = 1;
$query
	->select($db->quoteName(array('id', 'profile_key', 'profile_value', 'ordering')))
	->from($db->quoteName('#__clients'))
	->where($db->quoteName('org_id') . ' = :orgid')
	// Константы ParameterType: BOOLEAN, INTEGER, LARGE_OBJECT, NULL, STRING (по умолчанию)
	->bind(':orgid', $orgid, ParameterType::INTEGER)
	->order('ordering ASC'); // ASC - по возрастанию; DESC - по убыванию
// Используйте $query->order('RAND()'); для случайной выборки.
// Применим запрос, используя наш недавно заполненный объект запроса.
$db->setQuery($query);
// Загрузим результаты в виде списка объектов stdClass
// (дополнительные параметры для получения данных см. ниже).
$results = $db->loadObjectList();
						// Получить соединение с БД.
$db = Factory::getDbo();
// Создаём новый объект запроса.
$query = $db->getQuery(true);
$query->format('SELECT %1$n, %2$n, %3$n, %4$n FROM %5$n WHERE %6$n = %7$a ORDER BY %8$n', 
				'id', 'profile_key', 'profile_value', 'ordering', 
				'#__clients', 
				'org_id', 
				1, 
				'ordering ASC');
// Применим запрос, используя наш недавно заполненный объект запроса.
$db->setQuery($query);
// Загрузим результаты в виде списка объектов stdClass
// (дополнительные параметры для получения данных см. ниже).
$results = $db->loadObjectList();
						Каждый токен принимает одну из следующих форм:
Спецификатор типов:
Спецификатор типов даты:
/* Добавление одного условия или массива условий в строку WHERE запроса */
$query->where('a = 1')->where('b = 2');
$query->where(array('a = 1', 'b = 2'));
/* Добавление в запрос инструкцию WHERE IN. */
$query->whereIn('id', array(1, 2, 3));
/* Добавление в запрос оператор WHERE NOT IN. */
$query->whereNotIn('id', array(1, 2, 3));
/** Расширение строки WHERE одним условием или массивом условий с потенциально
 * другим логическим оператором, отличным от того, который используется 
 * в текущем предложении WHERE. */
$query->where(array('a = 1', 'b = 2'))->extendWhere('XOR', array('c = 3', 'd = 4'));
// Сформированная строка запроса: WHERE ((a = 1 AND b = 2) XOR (c = 3 AND d = 4))
/* Расширение строки WHERE оператором OR и одним условием или массивом условий. */
$query->where(array('a = 1', 'b = 2'))->orWhere(array('c = 3', 'd = 4'));
// Сформированная строка запроса: WHERE ((a = 1 AND b = 2) OR (c = 3 AND d = 4))
/* Расширение строки WHERE оператором AND и одним условием или массивом условий. */
$query->where(array('a = 1', 'b = 2'))->andWhere(array('c = 3', 'd = 4'));
// Сформированная строка запроса: WHERE ((a = 1 AND b = 2) AND (c = 3 OR d = 4))
						Используя методы DatabaseQuery join, можно выбирать записи из нескольких связанных таблиц. Общий метод join принимает два аргумента: тип соединения (INNER, OUTER, LEFT, RIGHT) и условие соединения.
<?php
				
use Kristall\Input\Input;
// Получить соединение с БД.
$db = Factory::getDbo();
// Создаём новый объект запроса.
$query = $db->getQuery(true);
// Получаем параметр запроса
$input = new Input(); // см. библиотеку [Супер глобальный массив]
$user_org_id = $input->getInt('user_org_id', 0);
$query
	->select($db->quoteName(array('module.mod_id', 'module.mod_name')))
	->select($db->quoteName('modprice.mod_price'))
	->from($db->quoteName('#__modules','module'))
	// Условие объединения таблиц modules и modules_price
	->join('LEFT', $db->quoteName('#__modules_price', 'modprice') . 
		' ON ' . $db->quoteName('module.mod_id') . ' = ' .  $db->quoteName('modprice.mod_id'))
	// Условия выборки из таблицы modules
	->where(array(
			$db->quoteName('module.disabled') . ' = 0', 
			$db->quoteName('module.mod_for_all') .' >= 0'))
	->andWhere(array(
			$db->quoteName('module.mod_org'). ' = ' . $user_org_id,
			$db->quoteName('module.mod_org') . ' IS NULL'))
	// Условия выборки из таблицы modules_price
	->where(array(
			$db->quoteName('modprice.mod_type') . ' = 1', 
			$db->quoteName('modprice.mod_from') . ' <= ' . time()))
	->andWhere(array(
			$db->quoteName('modprice.mod_to') . ' > ' . time(), 
			$db->quoteName('modprice.mod_to') . ' IS NULL'));
$db->setQuery($query);
// Выведем построенный запрос на экран
echo $db->getQuery();
						Результат выполнения скрипта:
SELECT "module"."mod_id","module"."mod_name","modprice"."mod_price"
FROM "#__modules" AS "module"
LEFT JOIN "#__modules_price" AS "modprice" ON "module"."mod_id" = "modprice"."mod_id"
WHERE 
(
	("module"."disabled" = 0 AND "module"."mod_for_all" >= 0) 
		AND ("module"."mod_org" = 1 OR "module"."mod_org" IS NULL) 
		AND "modprice"."mod_type" = 1 AND "modprice"."mod_from" <= 1651540243
) 
	AND ("modprice"."mod_to" > 1651540243 OR "modprice"."mod_to" IS NULL)"
						// Получить соединение с БД.
$db = Factory::getDbo();
// Создаём новый объект запроса.
$query = $db->getQuery(true);
// Поля для обновления.
$fields = array(
    $db->quoteName('profile_value') . ' = ' . $db->quote('Демо данные.'),
    $db->quoteName('ordering') . ' = 2',
    // Если вы хотите сохранить значение NULL, вы должны указать это.
    $db->quoteName('avatar') . ' = NULL',
);
// Условия, для которых записи должны быть обновлены.
$conditions = array(
    $db->quoteName('id') . ' = 42', 
    $db->quoteName('profile_key') . ' = ' . $db->quote('custom.message')
);
$query->update($db->quoteName('#__clients'))->set($fields)->where($conditions);
$db->setQuery($query)->execute();
					// Получить соединение с БД.
$db = Factory::getDbo();
// Создаём новый объект запроса.
$query = $db->getQuery(true);
// Столбцы для вставки.
$columns = array('profile_key', 'profile_value', 'ordering');
// Вставляемые значения.
$values = array($db->quote('custom.message'), $db->quote('Демо данные'), 137);
// Подготовка запроса на вставку.
$query
    ->insert($db->quoteName('#__clients'))
    ->columns($db->quoteName($columns))
    ->values(implode(',', $values));
// Установим запрос, используя наш недавно заполненный объект запроса, и выполним его.
$db->setQuery($query)->execute();
// Получить id только что вставленной строки [auto_increment]
$new_row_id = $db->insertid();
					// Получить соединение с БД.
$db = Factory::getDbo();
// Создаём новый объект запроса.
$query = $db->getQuery(true);
// Удалить все пользовательские ключи для группы 12.
$conditions = array(
    $db->quoteName('group_id') . ' = 12', 
    $db->quoteName('profile_key') . ' = ' . $db->quote('custom.%')
);
$query->delete($db->quoteName('#__clients'))->where($conditions);
// Установим запрос, используя наш недавно заполненный объект запроса, и выполним его.
$db->setQuery($query)->execute();
					Компания НПО «Кристалл» - российская многопрофильная ИТ-компания, уже более 12 предоставляет профессиональные услуги и высокотехнологичные решения в области IT-консалтинга, интеграционных проектов и разработки программного обеспечения для корпоративных заказчиков.
ПОДРОБНЕЕ8 800 300 2628,
 +7 (4217) 591-830
 +7 (962) 297-36-06
info@mbskristall.ru, poisk_kms@mail.ru
681016, Россия, Хабаровский край, г. Комсомольск-на-Амуре, ул. Кирова, 5, п. 1001