JTable - работа с таблици с бази данни

Joomla! ни предоставя мощен абстрактен клас JTable; в същото време можем да изпълняваме всички основни функции при работа с масата. За всяка таблица, която искаме да използваме в класа JTable, трябва да създадем нов подклас.

При подкласиране JTable, трябва да се придържаме към някои правила. Тези правила ще ни позволят да интегрираме нашето разширение в рамката на Joomla.

И така, всеки подклас на JTable трябва да се намира в отделен файл в директорията на таблиците (в административната част на компонента). Името на класа, което трябва да бъде създадено, трябва да има префикс с таблица. Името на файла трябва да бъде в единствено число.

Нека използваме горната схема на таблицата, за да илюстрираме как да работим с класа JTable.

Класът трябва да носи името Table [Class name], например TableMyData и да се намира в директорията JPATH_COMPONENT_ADMINISTRATOR.DS.'tables'.DS.'mydata.php '. Първият път, когато използваме нашия клас, трябва да дефинираме глобални свойства. Глобалните свойства съответстват на полетата на таблицата и трябва да имат еднакви имена. Използваме тези свойства като буфер за съхраняване на отделни записи.

Второ, за да използваме метода JTable: getInstance (), трябва да дефинираме конструктор.

Трето, трябва да заменим метода check (). Този метод проверява съдържанието на буфера и връща булева стойност. Ако методът върне false, използвайте метода setError (), за да обясните грешката.

Сега, когато създадохме клас TableMyData, трябва да създадем екземпляр на обекта, използвайки статичния метод JTable: getInstance ().

Имайте предвид, че не свързваме mydata.php, а само директорията с таблици. Когато JTable започне да създава екземпляр на TableMyData върху обект, mydata.php се свързва автоматично.

CRUD (Create Read Update Delete) е общото име за основните задачи за управление на таблици.
Всички CRUD примери за $ table се отнасят до клас TableMyData, а $ id се отнася до идентификатора на записа, който обработваме в момента. В този пример ние създаваме нов запис; $ table - екземпляр на класа TableMyData.

Методът reset () изчиства нашия буфер и задава стойностите на всички свойства на стойностите им по подразбиране. Методът getNextOrder () определя следващия елемент в реда за влагане. Ако записът не съществува, той задава стойността 1.

Нека разгледаме отблизо нашия пример. Някои от полетата имаха стойност по подразбиране и след писане стойността на датата ще бъде празна. След стартиране на предишния пример, буферът $ table изглежда така:

След изпълнение на метода store () (запазване на записа), можем да го заредим:

Нашият буфер сега изглежда така:

Вместо да зареждаме запазения си запис, първоначално бихме могли да зададем стойностите по подразбиране правилно и не би трябвало да презареждаме записа.

Някои от стойностите по подразбиране обаче зависят от типа данни. Следователно трябва да заменим метода reset (). Например стойността check_out_time ще бъде $ db-> getNullDate (). Така че, за да заредите конкретен запис, използвайте метода:

За да актуализираме запис в буфер, можем да използваме два метода: първият е да заредим запис от базата данни, вторият е да зададем конкретни стойности за свойствата на буфера.

Този пример показва как да актуализирате запис:

Последното нещо, което ще разгледаме, е изтриването на запис:

Ако не посочим идентификационния номер в метода delete (), тогава идентификаторът ще бъде взет от буфера.

Ако нашият запис в таблицата има свързани записи с други таблици, тогава първо трябва да проверим с метода canDelete (). Този метод има само един параметър, който е двумерен масив. В масива трябва да има няколко ключа - idfield, name, joinfield и label. idfield е името на първичния ключ в съответната таблица. name е името на самата таблица. joinfield е името на външния ключ на съответната таблица. label е описание на връзката между таблици, за показване на съобщение за грешка, ако не е намерена връзка.

Представете си, че има друга таблица #__myextention_children. Тази таблица има първичен ключ, Childid и външен ключ, първичен, който се отнася до записа в таблицата #__myextension_mydata. В този пример ще проверим дали има зависимост между записите на таблицата #__myextension_children и #__myextension_mydata, преди да изтрием записа от таблицата #__myextension_mydata.

Можем да дефинираме повече от една връзка между таблици. Да приемем, че таблицата #__myextension_illegitimate_children също съществува:

Управление на запазени полета

Нашата таблица съдържа всички запазени полета, които можем да манипулираме, използвайки методите на класа JTable. Нека помислим за управлението на тези полета по-подробно.

Издателство

Можете да увеличите записа, като използвате метода hit (). Например ще зададем идентификационния номер на записа и увеличението.

Също така можем да посочим идентификатора, който ни е необходим, в параметъра на метода hit (). Но трябва да помним, че това ще актуализира буфера.

Проверка

Преди да започнем да заключваме записите си, трябва да се уверим, че записът вече не е заключен. Това е необходимо, за да се предотврати едновременното редактиране на един и същи запис от множество потребители. За целта можем да използваме метода isCheckOut (). В този пример проверяваме:

След това блокираме записа за потребителя:

За да обработим записа, използваме следния метод:

Не забравяйте, че тези методи могат да се използват само за влезли потребители.

Когато искаме да подредим елементи в определен ред, JTable ни предоставя набор от методи за това. Първият метод, който разгледахме, ще бъде reorder (). Този метод коригира грешки в реда на записите в таблицата.

В по-сложни таблици записите обикновено се разделят на групи и за това трябва да добавите допълнителен параметър към метода reorder (). Да приемем, че имаме групово поле в нашата таблица. В този пример ще поръчаме записите в група 1.

Имайте предвид, че получаваме обекта на базата данни не от JFactory, а от таблица!
Преди сме използвали метода getNextOrder (). Методът ни дава следващата позиция в реда за поръчка. Както при reorder (), ние имаме възможността да дефинираме групи. Например получаваме следващия номер на поръчка за група 1.

И последният метод е move (). Необходимо е записът да се премести с една позиция нагоре или надолу. Нека преместим записа нагоре в примера.
$ table-> load ($ id); $ таблица-> преместване (-1); Отново имаме опцията да посочим групи. Нека покажем това с пример:

Поле за параметри на параметри

Класът JTable няма специални методи за манипулиране на INI параметри. JTable буфер е за съхраняване на RAW данни за параметри, които трябва да бъдат запазени.

Класът JParameter се използва за обработка на полето на параметъра. Първо, трябва да създадем нов обект JParameter и ако имаме достъп до съществуващ запис, анализирайте го.

Класът JParameter разширява класа JRegistry. В този пример ще разгледаме как можете да анализирате параметрите с помощта на класа JParameter.

След като имаме достъп до параметрите, можем да ги променим, като използваме методите get () и set ().

Също така можем да получим данни като INI низ, използвайки метода toString ().

Можем сами да създадем и параметърния низ. За да направите това, трябва да посочите самите параметри и пътя към XML файла на манифеста.

За да покажете параметрите на екрана под формата на формуляр, използвайте метода render ().

Когато съхранявате дата, е много важно тя да е в правилния формат. За MySql трябва да съхраним датата като ГГГГ-ММ-ДД ЧЧ: ММ: СС. Най-лесният начин да направите това е да използвате класа JDate. В този клас се нуждаем от метода toMySQL (), за да преобразуваме датата в правилната форма.

$ myDate е UNIX дата (клеймо за време).