Использование класса 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))
{
	// обрабатываем ошибки
}