Официальная документация по работе с базой данных находится здесь. Но… Как показывает опыт, можно, и на мой взгляд даже нужно, применять более короткую запись в запросах типа SELECT в базе данных CMS Joomla!.
loadResult()
Итак. Официальный алгоритм простого запроса loadResult() к БД выглядит следующим образом.
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('name');
$query->from($db->quoteName('#__my_table'));
$query->where($db->quoteName('id')." = ".$db->quote($some_value));
$db->setQuery($query);
$result = $db->loadResult();
В этом запросе мы получаем имя пользователя name из таблицы:
id | name | username | |
---|---|---|---|
1 | John Smith | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | johnsmith |
2 | Magda Hellman | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | magdah |
3 | Yvonne de Gaulle | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | ydegaulle |
Это же значение можно получить используя более короткую, и, на мой взгляд, более логичную, запись (где переменная $some_value = 1):
$db = JFactory::getDbo();
$db->setQuery('SELECT name FROM #__my_table WHERE id = ' . $some_value);
$valueStr = $db->loadResult();
В результате получаем в переменную $valueStr значение соответствующей ячейки таблицы John Smith.
loadRow()
Для получения в массиве целой строки из таблицы используем запрос loadRow().
id | name | username | |
---|---|---|---|
1 | John Smith | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | johnsmith |
2 | Magda Hellman | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | magdah |
3 | Yvonne de Gaulle | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | ydegaulle |
$db = JFactory::getDbo();
$db->setQuery('SELECT * FROM #__my_table WHERE id = ' . $some_value);
$valueArr = $db->loadRow();
В результате в переменную $valueArr получаем массив в виде:
Используя запрос:
$value = $valueArr[0];
…получаем id строки записи. Далее меняя вместо "0" ключи массива, получаем те значения строки таблицы, которые нам нужны.
loadAssoc()
Строку мы также можем получить в виде ассоциативного массива, где ключами выступают имена колонок таблицы. Используя запрос:
$db = JFactory::getDbo();
$db->setQuery('SELECT * FROM #__my_table WHERE id = ' . $some_value);
$valueArr = $db->loadAssoc();
…получаем ассоциативный массив в виде:
Соответственно, чтобы получить, например, email пользователя, нужно обратиться к ассоциативному массиву в переменной $valueArr с ключом email:
$value = $valueArr['email'];
loadObject()
Также данные строки из таблицы базы данных в CMS Joomla! можно получить в виде объекта, и работать в дальнейшем с этими данными соответствующим способом.
$db = JFactory::getDbo();
$db->setQuery('SELECT * FROM #__my_table WHERE id = ' . $some_value);
$valueArr = $db->loadObject();
В результате выполнения такого запроса, мы получаем объект, который содержит следующие данные:
Соответственно, чтобы получить данные логина пользователя из этого объекта, нужно обратиться к нему со следующим запросом:
$value = $valueArr->username;
loadColumn()
id | name | username | |
---|---|---|---|
1 | John Smith | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | johnsmith |
2 | Magda Hellman | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | magdah |
3 | Yvonne de Gaulle | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | ydegaulle |
Используя запрос к БД в виде:
$some_value = '1,2,3';
$db = JFactory::getDbo();
$db->setQuery('SELECT name FROM #__my_table WHERE id IN (' . $some_value . ')');
$valueArr = $db->loadColumn();
…мы получаем в массиве данные из колонки name, где id строк соответствуют значениям "1", "2" и "3".
loadRowList()
Чтобы иметь возможность оперировать данными сразу из многих колонок таблицы, применяем запрос loadRowList().
id | name | username | |
---|---|---|---|
1 | John Smith | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | johnsmith |
2 | Magda Hellman | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | magdah |
3 | Yvonne de Gaulle | Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. | ydegaulle |
В виде кода PHP запрос может выглядеть следующим образом:
$some_value = '1,2,3';
$db = JFactory::getDbo();
$db->setQuery('SELECT * FROM #__my_table WHERE id IN (' . $some_value . ')');
$valueArr = $db->loadRowList();
В результате получаем массивы в массиве:
Соответственно, чтобы получить определенную запись из определенной ячейки, нужно использовать код следующего типа:
$value = $valueArr[2][3];
Таким образом, мы получаем значение логина пользователя (username) из третьей строки (счёт в массиве начинается с ноля), и четвёртого столбца, что в нашем случае, соответствует значению ydegaulle.
loadAssocList()
Но… В большинстве случаев подобный вид массива сложно использовать в практических целях, поэтому, существует ещё один метод получения данных из БД CMS Joomla! уже в виде ассоциативного массива, где ключами массива являются названия полей таблицы. Например:
$some_value = '1,2,3';
$db = JFactory::getDbo();
$db->setQuery('SELECT * FROM #__my_table WHERE id IN (' . $some_value . ')');
$valueArr = $db->loadAssocList();
В этом случае мы получаем уже ассоциативный массив в виде:
Этот вид массива удобно применять, в частности, в цикле for, когда нам в одном месте нужно использовать одно значение в зависимости от другого значения из той же таблицы. Например, для получения записи имени пользователя в цикле "$i = 1", мы используем код:
$i = 1;
$value = $valueArr[$i]['name'];
В результате получаем Magda Hellman.
loadAssocList($key)
В большинстве же случаев наиболее удобно использовать данные массива в привязке к определённому уникальному ключу. Например, id пользователя, статьи, email пользователя и т.д. Для подобных случаев в системе управления контентом (CMS) Joomla! существует ещё один способ формирования ассоциативного массива из нескольких столбцов одной таблицы базы данных – loadAssocList($key). В качестве примера в нижеприведенном коде мы используем привязку к уникальному ключу id пользователя.
$some_value = '1,2,3';
$db = JFactory::getDbo();
$db->setQuery('SELECT * FROM #__my_table WHERE id IN (' . $some_value . ')');
$valueArr = $db->loadAssocList('id');
В результате получаем массив:
loadAssocList($key, $column)
Часто бывает нужно, избежав лишних данных в переменной, получить связанные значение из массива. Таким образом, переменной $key присваиваем значение уникального ключа, и в качестве переменной $column указываем имя поля, которое будет представлено в связке с соответствующим ключом.
$some_value = '1,2,3';
$db = JFactory::getDbo();
$db->setQuery('SELECT * FROM #__my_table WHERE id IN (' . $some_value . ')');
$valueArr = $db->loadAssocList($id, $name);
…в результате получаем в переменной массив:
…где ключами массива являются id строки, а значением – имя пользователя (name).
loadObjectList()
В качестве альтернативы простому ассоциативному массиву CMS Joomla! предлагает ещё один формат данных, в виде объекта, который пользователь может получать из базы данных и использовать в своих скриптах.
$some_value = '1,2,3';
$db = JFactory::getDbo();
$db->setQuery('SELECT * FROM #__my_table WHERE id IN (' . $some_value . ')');
$valueArr = $db->loadObjectList();
В результате получаем массив из объектов в виде:
В этом случае, чтобы получить значение из определённой ячейки какой-либо строки, нужно применить код такого типа:
$value = $valueArr[1]->username;
…который нам возвращает логин пользователя из вышеприведенной таблицы используя строку с ключом "1" и ключом вложенного массива "username". В данном конкретном случае, данный код нам возвращает значение magdah.
Ну и напоследок…
loadObjectList($key)
Аналог loadObjectList(), но уже в качестве ассоциативного массива объектов с ключом по одному из полей с уникальними значениями. Например:
$some_value = '1,2,3';
$db = JFactory::getDbo();
$db->setQuery('SELECT * FROM #__my_table WHERE id IN (' . $some_value . ')');
$valueArr = $db->loadObjectList('username');
В данном случае мы получаем асоциативный массив из объектов со следующим содержимым:
Чтобы получить, например, имя пользователя, используя его логин, можно использовать следующий код:
$value = $valueArr['johnsmith']->name;
В результате получаем значение переменной $value = John Smith.
Если вы уже зарегистрированы на этом сайте, или уже оставляли здесь свои комментарии, отзывы, заявки на участие в акциях, чтобы добавить ещё один комментарий – авторизуйтесь
Добавить комментарий