Подключение к базе данных:

$db = JFactory::getDbo();

Также используется и в файле модели.

Получение экземпляра класса JDatabaseQuery:

$query = $db->getQuery(true);

Выбор данных из одной таблицы:

// Get a db connection.
$db = JFactory::getDbo();
 
// Create a new query object.
$query = $db->getQuery(true);
 
// Select all records from the user profile table where key begins with "custom.".
// Order it by the ordering field.
$query->select(array('user_id', 'profile_key', 'profile_value', 'ordering'));
$query->from('#__user_profiles');
$query->where('profile_key LIKE \'custom.%\'');
$query->order('ordering ASC');
 
// Reset the query using our newly populated query object.
$db->setQuery($query);
 
// Load the results as a list of stdClass objects.
$results = $db->loadObjectList();

Выбор данных из двух таблиц:

// Get a db connection.
$db = JFactory::getDbo();
 
// Create a new query object.
$query = $db->getQuery(true);
 
// Select all articles for users who have a username which starts with 'a'.
// Order it by the created date.
$query
    ->select(array('a.*', 'b.username', 'b.name'))
    ->from('#__content AS a')
    ->join('INNER', '#__users AS b ON (a.created_by = b.id)')
    ->where('b.username LIKE \'a%\'')
    ->order('a.created DESC');
 
// Reset the query using our newly populated query object.
$db->setQuery($query);
 
// Load the results as a list of stdClass objects.
$results = $db->loadObjectList();

Выбор данных из больше чем двух таблиц:

$query
    ->select(array('a.*', 'b.username', 'b.name', 'c.*', 'd.*'))
    ->from('#__content AS a')
    ->join('INNER', '#__users AS b ON (a.created_by = b.id)')
    ->join('LEFT', '#__user_profiles AS c ON (b.id = c.user_id)')
    ->join('RIGHT', '#__categories AS d ON (a.catid = d.id)')
    ->where('b.username LIKE \'a%\'')
    ->order('a.created DESC');

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

с помощью SQL:

// Get a db connection.
$db = JFactory::getDbo();
 
// Create a new query object.
$query = $db->getQuery(true);
 
// Insert columns.
$columns = array('user_id', 'profile_key', 'profile_value', 'ordering');
 
// Insert values.
$values = array(1001, $db->quote('custom.message'), $db->quote('Inserting a record using insert()'), 1);
 
// Prepare the insert query.
$query
    ->insert($db->quoteName('#__user_profiles'))
    ->columns($db->quoteName($columns))
    ->values(implode(',', $values));
 
// Reset the query using our newly populated query object.
$db->setQuery($query);

Задали sql запрос, теперь его выполняем:

try {
    // Execute the query in Joomla 2.5.
    $result = $db->query();
} catch (Exception $e) {
    // catch any database errors.
}

Для Joomla Framework 12.1 и выше:

try {
    // Execute the query in Joomla 3.0.
    $result = $db->execute();
} catch (Exception $e) {
    // catch any database errors.
}

с помощью объекта записи:

// Create and populate an object.
$profile = new stdClass();
$profile->user_id = 1001;
$profile->profile_key='custom.message';
$profile->profile_value='Inserting a record using insertObject()';
$profile->ordering=1;
 
try {
    // Insert the object into the user profile table.
    $result = JFactory::getDbo()->insertObject('#__user_profiles', $profile);
catch (Exception $e) {
    // catch any errors.
}

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

с помощью SQL:

$db = JFactory::getDbo();
 
$query = $db->getQuery(true);
 
// Fields to update.
$fields = array(
    'profile_value=\'Updating custom message for user 1001.\'',
    'ordering=2');
 
// Conditions for which records should be updated.
$conditions = array(
    'user_id=42',
'profile_key=\'custom.message\'');
 
$query->update($db->quoteName('#__user_profiles'))->set($fields)->where($conditions);
 
$db->setQuery($query);
 
try {
$result = $db->query(); // Use $db->execute() for Joomla 3.0.
catch (Exception $e) {
// Catch the error.
}

с помощью объекта:

// Create an object for the record we are going to update.
$object = new stdClass();
 
// Must be a valid primary key value.
$object->id = 1;
$object->title = 'My Custom Record';
$object->description = 'A custom record being updated in the database.';
 
try {
    // Update their details in the users table using id as the primary key.
    $result = JFactory::getDbo()->updateObject('#__custom_table', $object, 'id');
} catch (Exception $e) {
    // catch the error.
}

Удаление записи:

$db = JFactory::getDbo();
 
$query = $db->getQuery(true);
 
// delete all custom keys for user 1001.
$conditions = array(
    'user_id=1001',
'profile_key LIKE \'custom.%\'');
 
$query->delete($db->quoteName('#__user_profiles'));
$query->where($conditions);
 
$db->setQuery($query);
 
try {
$result = $db->query(); // $db->execute(); for Joomla 3.0.
} catch (Exception $e) {
// catch the error.
}

Транзакция:

$db = JFactory::getDbo();
 
try {
    $db->transactionStart();
 
    $query = $db->getQuery(true);
 
    $values = array($db->quote('TEST_CONSTANT'), $db->quote('Custom'), $db->quote('/path/to/translation.ini'));
 
    $query->insert($db->quoteName('#__overrider'));
    $query->columns($db->quoteName(array('constant', 'string', 'file')));
    $query->values(implode(',',$values));
 
    $db->setQuery($query);
    $result = $db->query();
 
    $db->transactionCommit();
} catch (Exception $e) {
    $db->transactionRollback();
    // catch any database errors.
}

docs.joomla.org/Accessing_the_database_using_JDatabase/2.5

Комментарии   

#5 city std testing 27.08.2016 12:00
I got what you mean, appreciate it for posting. Woh I
am glad to find this website through google.
#4 Muktubek 18.03.2014 07:51
Цитирую 63478567325:
Не понял по поводу выборки из нескольких таблиц... Приведите простейший пример - выборка нескольких полей из разных таблиц без условий.

Зачем так мучатся вот простой пример

$db = JFactory::getDbo();

$sql = 'SELECT s1, s2 FROM Tablisa1, Tablisa2';


$db->setQuery($sql);
$result = $db->loadObject List();
return $result;

foreach($result as $row){
echo $row->s1; /* Столбец тоблицы 1 */
echo $row->s1; /* Столбец тоблицы 2 */
}

Вот и все только вы должны места s1, s2 писать названия столбца таблицы Tablisa1 Tablisa2 должны писать название вашей таблицы если tit не получуется могу обяснить через скайп вот мой скайп muktubek92
#3 Administrator 31.08.2013 08:27
Цитирую 63478567325:
Не понял по поводу выборки из нескольких таблиц... Приведите простейший пример - выборка нескольких полей из разных таблиц без условий.

Там и так уже простейший пример, а условие это строчка с where, ее можно пропустить, остальное нужно для связи таблиц, чтобы было понятнее, наверное, можно почитать по синтаксису sql, то что связано с join
#2 63478567325 31.08.2013 06:49
Не понял по поводу выборки из нескольких таблиц... Приведите простейший пример - выборка нескольких полей из разных таблиц без условий.
#1 Михаил 05.03.2013 03:57
Спасибо большое за статью!

Чтобы сделать комментарий, нужно авторизоваться на сайте!