Действия

Использование mosDBTable

Материал из База знаний Joomla

Это статья из раздела Программирование для Joomla. Вернитесь в него для более полной информации.


Мэппинг

Мэппинг (mapping) – это преобразование PHP-объектов в строки таблиц базы данных, по заранее определенным правилам.

В Joomla есть встроенный класс для отображения классов языка PHP – mosDBTable (исходный код находится в файле /includes/database.php). Более мощным и известным аналогом является пакет Hibernate языка Java. По сути, это абстрактный класс таблиц в базе данных. Для создания класса связанного с какой-то конкретной таблицей (отображающего ее) его надо пронаследовать от этого класса и определить в классе поля, соответствующие названиям столбцов таблицы.

Использование этого механизма дает большие преимущества для разработчиков расширений. При помощи мэппинга можно:

  • Автоматически принимать входные данные и не заботиться о безопасности и необходимости защиты от SQL-Injection.
  • Сохранять данные при помощи вызова одного родительского метода, не тратя время на ручное создание SQL запросов типа INSERT.
  • Загружать данные в класс, не создавая SELECT запрос (он будет сформирован автоматически).


Пример класса - наследника mosDBTable

Ниже приведен пример создания такого класса и вариантов его использования. Предположим, что этот класс используется для отображения таблицы, имеющей следующие поля:

  • Id – идентификатор записи
  • Name – имя записи
 
class xTable extends mosDBTable {
 
        var $id=null;//первичный ключ
        var $name=null;//имя записи
 
        /**
        * Конструктор класса.
        */
        function myTable( &$db ) {
                $this->mosDBTable( '#__xtable', 'id', $db );
        }
 }
 

В приведенном примере создается класс xTable наследуемый от mosDBTable. Он описывает два поля – id и name и в конструкторе определяет рабочую таблицу - #__xtable. Первичным ключом определяется поле “id”.

Теперь для работы надо создать экземпляр класса:

 
$param = new xTable( $database );
 


Загрузка данных

Для загрузки записи с определенным ключом используется метод load.

 
$param->load(23);
 

В данном примере загружается строка таблицы с идентификатором 23. Столбцы доступны как поля объекта $param, например $param->name.


Прием и проверка входных данных

Для приема входных данных используется метод bind.

 
if (!$param->bind( $_POST )) {
	echo “Ошибка";
	exit();
}

Для проверки данных в пользовательском классе должен быть переопределен метод check, который в случае если все входные данные верны, должен возвратить true, в противном случае false.

 
function check() {
	if ($this->name==’’) {
		$this->_error = “Имя не может быть пустым”;
		return false;
	}
	return true;
}
 


Вставка и обновление данных

Для сохранения данных используется метод store. Он создает SQL-запрос вставки или обновления данных. Вид запроса зависит от того, был ли во входном массиве, использованном в методе bind, определен или нет. Если нет – значит, данной записи еще не существует в таблице и данные необходимо вставить, генерируется метод INSERT. Если требуется обновить объект, то это реализуется при помощи скрытого поля <input type=’hidden’ name=’id’ value=’ID_редактируемого_поля’>, при определении данных в методе bind поле id не будет равно NULL и будет сгенерирован запрос UPDATE.

 
if (!$param->store()) {
	echo "Ошибка сохранения данных";
	exit();
}