В прошлых статьях мы написали небольшой каркас для экспериментов с компонентом. По своей сути он самодостаточен, вы вольны делать в нем все. что считаете нужным. Но, как и в любом более менее серьезном проекте, вам не обойтись без построении бизнес логики, а она в свою очередь невозможна без использования хранилищ. Хранилищем номер один будут файлы. но они не удобны. Более удобна для хранения данных безусловно база данных. Обычно это база в MySQL сервере. Про работу с ней и поговорим в этой статье. 

Работа с БД в joomla поставлена не самым удобным образом. К примеру, чтобы выдернуть несколько строк из таблицы, нужно сделать несколько манипуляций

$db = JFactory::getDBO();
$db->setQuery('select * from #_tablaname');
$rows = $db->loadAssocList();

Вы заметили jml_ в названии таблицы, эту подстроку Joomla автоматически заменит на префикс базы. который прописан в конфигурационном файле. Это очень удобно, и рекомендую делать именно так.

но это еще не самый худший пример. При вставке и обновлении записей, кода будет еще больше.

$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query
	->insert($db->quoteName('jml_tablename'))
	->columns('name,value')
	->values(implode(',', array("'vasya'","'poppkin'"));
$db->setQuery($query);
$db->query()
$db->insertid();

Страшное дело. Обновление записей происходит по тому же принципу.

$db = JFactory::getDBO();
$query = $db->getQuery(true);
$obj = new stdclass();
		
$query
	->update($db->quoteName('jml_tablename'))
	->where('id=4');

$array = array('name'=>'vova');
			
foreach($array as $key=>$value){
	$query->set($db->quoteName($key).'="'.$value.'"');
}	
		 
$db->setQuery($query);
$db->query();

И наконец удаление

$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query
	->delete($db->quoteName('jml_tablename'))
	->where(array('id=5','region=6','`pos`=2 and `name`='.$db-.quote('vasya').''));
		 
$db->setQuery($query);
$db->query();

Не сильно все это удобно, но ничего не поделаешь. хотя нет, вру. Поделаешь. Для своих нужд я написал класс, который облегчает выполнение всех этих повседневных операций. Однажды попробовав ее, Вам уже не захочется использовать ничего другого. Это как с компьютерными креслами. Привыкнув к одному компьютерному креслу, тяжело садится на другое. 

С ней эти операции значительно упрощаются операции

Выборка нескольких строк

uno::getRows('tablename',array('`name`='.uno::escape('vasya')));

Вставка записи

uno::insert('tablename',array('name'=>'vasya'));

обновление записи

uno::update('tablename',array('name'=>'vasya'),array('name='.uno::_('vasya')))

Гораздо удобнее, вы согласны?

Оставлять комментарии могут только зарегистрированные пользователи

Комментарии  

Иван12
# Иван12 17.11.2015 16:57
Пишет ошибку Restricted access, а если убрать эту строку
defined( '_JEXEC') or die('Restricted access');
то пишет Class JFactory was not ...