Офіційна документація по роботі з базою даних знаходиться тут. Але… Як показує досвід, можна, і на мій погляд навіть потрібно, застосовувати більш короткий запис в запитах типу 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.
Якщо ви вже зареєстровані на цьому сайті, або вже залишали тут свої коментарі, відгуки, заявки на участь в акціях, щоб додати ще один коментар – авторизуйтесь
Додати коментар