array loadAssoc()
Метод загружает первую строку результирующей выборки в виде ассоциативного массива, ключами которого становятся названия полей таблицы. Если запрос возвращает больше одной строки, то метод вернет первую из них.
$db =& JFactory::getDbo(); $query = 'SELECT * FROM '.$db->nameQuote('#__categories'); $db->setQuery($query); print_r($db->loadAssoc());
Результат запроса:
Array([id]=>1 [asset_id]=>0 [parent_id]=>0 [lft]=>0 [rgt]=>11 [level]=>0 [path]=> [extension]= >system [title]=>ROOT [alias]=>root [note]=> [description]=> [published]=>1 [checked_out]=>0 [checked_out_time]=>0000-00-00 00:00:00 [access]= >1 [params]=>{} [metadesc]=> [metakey]=> [metadata]=> [created_user_id]=>0 [created_time]=>2009-10-18 16:07:09 [modified_user_id]= >0 [modified_time]=>0000-00-00 00:00:00 [hits]=>0 [language]=>*)
object loadObject()
Метод загружает первую строку результирующей выборки в виде объекта класса stdClass, причем его полями становятся названия полей таблицы. Если запрос возвращает больше одной строки, то метод вернет первую из них.
$db =& JFactory::getDbo(); $query = 'SELECT * FROM '.$db->nameQuote('#__categories'); $db->setQuery($query); print_r($db->loadObject());
Результат запроса:
stdClass Object([id]=>1 [asset_id]=>0 [parent_id]=>0 [lft]=>0 [rgt]=>11 [level]= >0 [path]=> [extension]=>system [title]=>ROOT [alias]=>root [note]=> [description]=> [published]=>1 [checked_out]=>0 [checked_out_time]=>0000-00-00 00:00:00 [access]= >1 [params]=>{} [metadesc]=> [metakey]=> [metadata]=> [created_user_id]=>0 [created_time]=>2009-10-18 16:07:09 [modified_user_id]=>0 [modified_time]= >0000-00-00 00:00:00 [hits]=>0 [language]=>*)
array loadResultArray(int numinarray=0)
Метод загружает массив значений из результирующей выборки, полученных из одного столбца. Параметр numinarray используется для указания того, какой столбец нужно вернуть.
$db =& JFactory::getDbo(); $query = 'SELECT '.$db->nameQuote('extension'). ' FROM '.$db->nameQuote('#__categories'); $db->setQuery($query); print_r($db->loadResultArray());
Результатом будет следующий список:
Array([0]=>com_banners [1]=>com_contact [2]=>com_content [3]=>com_newsfeeds [4]=>com_weblinks [5]=>system)
Данный метод позволяет перебирать в цикле столбцы таблицы:
$db =& JFactory::getDbo(); $query = 'SELECT '.$db->nameQuote('path').','.$db->nameQuote('extension').','.$db->nameQuote('language'). ' FROM '.$db->nameQuote('#__categories'); $db->setQuery($query); for ($i = 0; $i <= 2; $i++) { $column = $db->loadResultArray($i); print_r($column); echo "<br>"; }
В результате на экран будет выведено:
Array([0]=> [1]=>uncategorised [2]=>uncategorised [3]= >uncategorised [4]=>uncategorised [5]=>uncategorised) Array([0]=>system [1]=>com_content [2]=>com_banners [3]= >com_contact [4]=>com_newsfeeds [5]=>com_weblinks) Array([0]=>* [1]=>* [2]=>* [3]=>* [4]=>* [5]=>*)
array loadRowList(int key)
Метод загружает список массивов или ассоциативный массив массивов. Если задан параметр key, то ключами возвращаемого массива будут значения поля, идущего в таблице под номером key, начиная с нуля.
$db =& JFactory::getDbo(); $query = 'SELECT * FROM '.$db->nameQuote('#__categories'); $db->setQuery($query); print_r($db->loadRowList(7));
В данном примере из таблицы #__categories ядра Joomla извлекаются все записи, причем ключами полученного массива будут значения столбца №7, т.е. поля extension:
Array ( [system]=>Array([0]=>1 … [25]=>*) [com_content]=>Array([0]=>2 … [25]=>*) [com_banners]=>Array([0]=>3 … [25]=>*) [com_contact]=>Array([0]=>4 … [25]=>*) [com_newsfeeds]=>Array([0]=>5 … [25]=>*) [com_weblinks]=>Array([0]=>6 … [25]=>*) )
Если не указать параметр key, то вместо ассоциативного массива мы получим список:
Array ( [0]=>Array([0]=>1 … [25]=>*) [1]=>Array([0]=>2 … [25]=>*) [2]=>Array([0]=>3 … [25]=>*) [3]=>Array([0]=>4 … [25]=>*) [4]=>Array([0]=>5 … [25]=>*) [5]=>Array([0]=>6 … [25]=>*) )
array loadAssocList(string key='', string column='')
Метод загружает список ассоциативных массивов или ассоциативный массив ассоциативных массивов. Если задан параметр key, то ключами полученного массива будут значения столбца под названием key. Если задан параметр column, то в полученном массиве будет всего один столбец column.
$db =& JFactory::getDbo(); $query = 'SELECT * FROM '.$db->nameQuote('#__categories'); $db->setQuery($query); print_r($db->loadAssocList('extension'));
Результат запроса:
Array ( [system]=>Array([id]=>1 [asset_id]=>0 ... [language]=>*) [com_content]=>Array([id]=>2 [asset_id]=>27 ... [language]=>*) [com_banners]=>Array([id]=>3 [asset_id]=>28 ... [language]=>*) [com_contact]=>Array([id]=>4 [asset_id]=>29 ... [language]=>*) [com_newsfeeds]=>Array([id]=>5 [asset_id]=>30 ... [language]=>*) [com_weblinks]=>Array([id]=>6 [asset_id]=>31 ... [language]=>*) )
Как видим, ключи полученного массива - это значения поля extension, заданного параметром в метод loadAssocList().
Зададим значение второго параметра, чтобы получить только значение id для каждой строки таблицы:
$db =& JFactory::getDbo(); $query = 'SELECT * FROM '.$db->nameQuote('#__categories'); $db->setQuery($query); print_r($db->loadAssocList('extension','id'));
Результат запроса:
Array([system]=>1 [com_content]=>2 [com_banners]=>3 [com_contact]=>4 [com_newsfeeds]=>5 [com_weblinks]=>6)
array loadObjectList(string key='')
Метод загружает список объектов stdClass или ассоциативный массив объектов stdClass. Если задан параметр key, то ключами полученного массива будут значения поля под названием key:
$db =& JFactory::getDbo(); $query = 'SELECT * FROM '.$db->nameQuote('#__categories'); $db->setQuery($query); print_r($db->loadObjectList('extension'));
Результат запроса:
Array ( [system]=>stdClass Object([id]=>1 [asset_id]=>0 ... [language]=>*) [com_content]=>stdClass Object([id]=>2 [asset_id]=>27 ... [language]=>*) [com_banners]=>stdClass Object([id]=>3 [asset_id]=>28 ... [language]=>*) [com_contact]=>stdClass Object([id]=>4 [asset_id]=>29 ... [language]=>*) [com_newsfeeds]=>stdClass Object([id]=>5 [asset_id]=>30 ... [language]=>*) [com_weblinks]=>stdClass Object([id]=>6 [asset_id]=>31 .. [language]=>*) )
Таблицы базы данных (класс JTable)
Класс JTable реализует паттерн Active Record и используется для управления таблицами базы данных.
Для каждой таблицы, которую вы будете создавать для своего компонента, необходимо создать класс, производный от JTable. Каждый такой класс помещается в отдельном файле в папке /administrator/components/com_<имя компонента>/tables. Имя класса строится по схеме Table<название таблицы>, а файла - <название таблицы>.php.
Для каждого поля таблицы необходимо создать одноименное поле класса.
Кроме того, создается конструктор класса, принимающий ссылку на объект JDatabase. Конструктор вызывает родительский конструктор, передавая ему название таблицы, название поля, являющегося первичным ключом таблицы, и объект JDatabase.