Схема таблиц XPDO

4387
518
12 Декабря 2016, 12:36

Схема таблиц XPDO.

XPDO генерирует таблицы базы и классы php согласно правилам, определённым в файле схемы в формате XML. В фале схемы определяется название пакета, которое используется для загрузки и использования схемы.

Объявление таблиц и баз банных.

В качестве примера рассмотрим создание пакета с названием Storefinder. Первым делом необходимо создать файл схемы, именование файла подлежит следующему правилу:

[название схемы].mysql.schema.xml

Если вы заметили, в название файла присутствует название платформы, в нашем случае это MySQL. XPDO позволяет иметь несколько схем для разных платформ баз дынных.

Описание базы.

Для нашей базы данных мы используем следующее описание:

<?xml version="1.0" encoding="UTF-8"?>
<model package="storefinder" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" tablePrefix="sf_" phpdoc-package="storefinder" phpdoc-subpackage="model" version="1.1">

Первая строка содержит стандартное описание версии XML, оно необходимо для синтаксического анализатора и определено стандартом XML. Вторая строчка содержит описание модели указанное в атрибутах тега model. Ниже следует описание атрибутов:

Package - атрибут определяет название нашего пакета которое мы будет использовать для загрузки нашей схемы.

baseClass – все ваши схемы должны наследоваться от базового класса. Для пользовательских схем XPDO в большинстве случаев подходит  значение по умолчанию xPDOObject .

platform  - XPDO поддерживает разные платформы, мы ипользуем MySQL по этому следует указать mysql

defaultEngine  - вы можете указать движок хранения используемы по умолчанию для ваших таблиц. Мы будем использовать MyISAM.

tablePrefix – опционально можно установить переопределение префикса для таблиц. Подробнее этот атрибут будет рассмотрен позже.

phpdoc-package & phpdoc-subpackage – эти атрибуты мы будем использовать в нашей базе и классах файлов. Это не стандартные атрибуты, мы используем их что бы показать возможность указывать любые свойства в атрибутах нашей модели.

Version – версия схемы определяет то, как модель будет обрабатываться XPDO

Версия 1.1

Обратите внимание что версия 1.1 была изменена для отдельно описания таблицы индексов отдельно от индекса элементов полей. Если вы не используете эту возможность, не меняйте версию на 1.1

Определение таблиц.

После описание схемы базы данных мы можем определить наши таблицы. Добавим:

<object class="sfStore" table="stores" extends="xPDOSimpleObject">

Object является описанием таблицы которую мы сгенерируем позже. Опишем значение атрибутов:

class  -  название класс который мы хотим получить из таблицы. Хороши опытом будет использование префиксов в названиях классов, чтобы предотвратить конфликты с другими пакетами.

table – сдесь следует указать название таблицы убрав из него префикс указанный для нашей модели.

extends  - таблицы должны наследовать класс xPDOObject или его потомка. Обратите внимание что вы можете расширят существующие классы в своей XML и ваш объект будет наследовать поля указанные в родительском объекте.

Здесь мы наследуем нашу таблицу от xPDOSimpleObject. Этот объект расширяет наш xPDOObject добавляя в него поле ID с auto_increment, что позволит нам не указывать это поле явно в наших таблицах.

Сейчас добавим в нашу таблицу описание нескольких полей:

<field key="name" dbtype="varchar" precision="100" phptype="string" null="false" default="" index="index" />
<field key="address" dbtype="varchar" precision="255" phptype="string" null="false" default="" />
<field key="city" dbtype="varchar" precision="255" phptype="string" null="false" default="" />
<field key="state" dbtype="varchar" precision="255" phptype="string" null="false" default="" />
<field key="zip" dbtype="varchar" precision="10" phptype="string" null="false" default="0" index="index" />
<field key="country" dbtype="varchar" precision="20" phptype="string" null="false" default="" />
<field key="phone" dbtype="varchar" precision="20" phptype="string" null="false" default="" />
<field key="fax" dbtype="varchar" precision="20" phptype="string" null="false" default="" />
<field key="active" dbtype="int" precision="1" attributes="unsigned" phptype="integer" null="false" default="0" />

 Мы перечислили в теге field колонки нашей таблицы, в атрибутах указаны свойства наших данные и другие параметры базы данных. Рассмотрим параметры который мы использовали:

key – имя колонки.

dbtype – тип данных используемый базой.

precision  - определяет кол-во памяти используемые полем.

attributes  - поле используется для типов данных для которых возможно значение «unsigned» что бы делать проверку на положительно значение.

phptype  - тип данных который будет использовать PHP

null  - указывает может ли поле иметь значение Null

default  - значение по умолчанию для поля

index (deprecated) – это атребут добавляет полю тип указателя PKindexили FK (поле актуально только для версии 1.0)

Теперь мы определим индексы:

<index alias="name" name="name" primary="false" unique="false" type="BTREE">
<column key="name" length="" collation="A" null="false" />
</index>
<index alias="zip" name="zip" primary="false" unique="false" type="BTREE">
<column key="zip" length="" collation="A" null="false" />
</index>

Псевдоним элемента

Новое в xPDO 2.2 является возможность определять поле псевдонимов. Это может быть полезно при изменении структуры таблиц, чтобы сохранить обратную совместимость, или для определения полезной псевдонимы для объектов API без необходимости изменения структуры таблицы.

<alias key="postalcode" field="zip" />

Здесь всё просто и не требует разъяснений.

И чтобы закончить определение нашей таблицы добавим закрывающий тег:

</object>

Добавим ещё пару таблиц в нашу модель. Сейчас мы определим класс sfOwner :

<object class="sfOwner" table="owners" extends="xPDOSimpleObject">
<field key="name" dbtype="varchar" precision="100" phptype="string" null="false" default="" index="index" />
<field key="email" dbtype="varchar" precision="255" phptype="string" null="false" default="" />
<index alias="name" name="name" primary="false" unique="false" type="BTREE">
<column key="name" length="" collation="A" null="false" />
</index>
</object>

 У нашего магазина возможно наличие нескольких владельцев, по этому добавим таблицу sfStoreOwner  что обеспечит отношение многие-ко-многим

<object class="sfStoreOwner" table="store_owners" extends="xPDOSimpleObject">
<field key="store" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" index="index" />
<field key="owner" dbtype="int" precision="10" attributes="unsigned" phptype="integer" null="false" default="0" index="index" />
<index alias="store" name="store" primary="false" unique="false" type="BTREE">
<column key="store" length="" collation="A" null="false" />
</index>
<index alias="owner" name="owner" primary="false" unique="false" type="BTREE">
<column key="owner" length="" collation="A" null="false" />
</index>
</object>

 Наша модель почти готова, осталось добавить закрывающий тег:

</model>

Теперь вы закончили описание схемы нашей модели, не забудьте сохранить файл. Следующим шагом мы определим отношения между нашими таблицами.

Теги:
  • xpdo
  • modx
  • MySQL
  • xml
ДРУГИЕ СТАТЬИ
Шпаргалка: вывод элементов инфоблока через GetList
Выводим элементы инфоблока посредством CIBlockElement::GetList
6502
780
04.10.2022
Битрикс: ошибка type => unknown у метода CFile::MakeFileArray
Решение ошибки с неизвестным типом файла при использовании метода CFile::MakeFileArray
4989
598
03.12.2021
Интересные книги по математике
Подборка действительно интересных книг по математике для тех, кто хочет углубиться в программировании и математике
6262
751
22.10.2019
301 редиректы, которые пригодятся для SEO
Подборка 301 редиректов, которые пригождается на большинстве проектов и которые просят сделать для СЕО оптимизации
5095
611
16.04.2019
Комментарии
Комментировать