Использование класса JTable
Для нужной таблицы создаем класс на основе JTable
defined('_JEXEC') or die();
class TableRecipes extends JTable
{
public function __construct($db)
{
parent::__construct( '#__recipes', 'id', $db );
}
public function bind($array, $ignore = '')
{
if (isset($array['attribs']) && is_array($array['attribs'])) {
$registry = new JRegistry;
$registry->loadArray($array['attribs']);
$array['attribs'] = (string)$registry;
}
return parent::bind($array, $ignore);
}
public function check()
{
if (trim($this->title) == '') {
$this->setError(JText::_('COM_INTEGRALS_WARNING_PROVIDE_VALID_NAME'));
return false;
}
return true;
}
}
Указали имя таблицы в базе данных и ключевое поле. Во время привязки данных, конвертируем массив в json. также делаем проверку, к примеру, есть ли текст заголовка.
Теперь, чтобы получить объект таблицы в файле модели, создадим функцию:
public function getTable($type = 'Recipes', $prefix = 'Table', $config = array())
{
return JTable::getInstance($type, $prefix, $config);
}
Если мы хотим получить объект таблицы, например, из модуля, то делаем так:
JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_recipes/tables');
$row = JTable::getInstance('recipes', 'Table', array());
Зарезервированные поля для таблиц.
| Field name | Methods using the field name |
|---|---|
| checked_out | checkOut, checkIn, isCheckedOut |
| checked_out_time | checkOut, checkIn, isCheckedOut |
| hits | hit |
| ordering | getNextOrder, reorder, move |
| published | publish |
Например, в джумла есть механизм блокировки таблицы на время редактирования, чтобы одну таблицу не начали редактировать несколько человек. Для этого есть метод checkOut, он делает отметки в соответствующем поле таблицы.
Чтобы добавить или изменить запись в таблице, делаем так:
$dataItems['id'] = $id;
$dataItems['fieldid'] = $data['id'];
$dataItems['title'] = $fieldItemTitles[$i];
$dataItems['ordering'] = $fieldItemOrders[$i];
$table->bind($dataItems);
if ($table->check())
{
if (!$table->store())
{
// обработчик ошибок записи
// используем $table->getError()
}
}
else
{
// обработчик ошибки проверки буфера
// тоже используем $table->getError()
}
Создаем нужный массив, привязываем его к таблице и сохраняем. Если переданный ключ совпадает с записью в таблице, то эта запись обновится.
Удаляем так:
if (!$table->delete($id))
{
// обрабатываем ошибки
}