Создание таблиц через MIGX, без использования phpmyadmin [MODX]

28 Января 2021
php

Задача: Создание собственных таблицы, со своей архитектурой и присоединение их к базовым таблицам MODX.

  1. Создание компонента:

    • Открываем "Управление MIGX", оно находится во вкладке Пакеты - MIGX

    • Придумываем название пакету и вбиваем его в поле Package Name:, по своему усмотрению задаём префикс или оставляем базовый (modx_)

    • Нажимаем Create Package

    Итого: Система выдаст сообщение об успешном создании пакета, проверить можно пройдя по пути core/components/название_пакета

  2. Создание таблицы:

    • Переходим во вкладку Xml Schema

    • Создаем схему согласно документации

      Пример:

      <?xml version="1.0" encoding="UTF-8"?>
      <model package="electrica" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" phpdoc-package="" phpdoc-subpackage="" version="1.1">
          <object class="electricaItem" table="electrica_items" extends="xPDOSimpleObject">
              <field key="id" dbtype="int" precision="10" phptype="integer" null="false" default="1"/>
              <field key="title" dbtype="varchar" phptype="string" precision="100" null="false" default="" />
              <field key="description" dbtype="text" phptype="string" null="false" default="" />
          </object>
      </model>
      

      ВАЖНО! название пакета должно совпадать с атрибутом package тега model, в данном примере название пакета должно быть electrica

    • Нажимаем Save schema

    • Переходим во вкладку Create tables

    • Нажимаем Create tables

    Итого: Система выдаст сообщение об успешном создании таблицы, проверить можно зайдя в phpmyadmin

  3. Присоединение к базовым таблицам:

    • Открываем вкладку Package

    • Нажимаем Add Extension Package

      Итого: Система выдаст сообщение об успешном добавлении таблицы в список базовых, проверить можно так:

      • Открываем Системные настройки & События

      • Ищем ключ extension_packages

        В нём содержатся JSON-массив с пакетами расширений, который необходимо загрузить при создании экземпляра класса MODX.

        Для нашего примера будет такой:

        [{
            "electrica":{
                "path":"[[++core_path]]components/electrica/model/"
            }
        }]
        

        В ряде случаев необходимо очистить кэш.

  4. Пример присоединения своей таблицы в pdoResources:

    [[pdoResources?
        &parents=`0`
        &where=`{
            "electricaItem.id":"123"
        }`
        &select = `{
            "electricaItem":"title,description",
            "modResource":"*"
        }`
        &leftJoin = `{
            "electricaItem": {
                "class":"electricaItem",
                "on": "electricaItem.id=modResource.id"
            }
        }`
        &tpl=`@INLINE
            [[+id]]
            [[+title]]
            [[+description]]
        `
    ]]