Генерация схемы для разрабатываемого компонента

Всем привет!

Столкнулся с проблемой. Разрабатываю компонент на основе modExtra, все по урокам Василия. Переименовал все при помощи rename_it.php. Исправил схему, сделал build.model.php, затем build.transport.php. Далее в таблице не создаются нужные поля и появляются ошибки при построении/установке пакета.

Содержимое схемы такое:



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

	<object class="msPresentationItem" table="ms2_mspresentation_items" extends="xPDOSimpleObject">
		<field key="name" dbtype="varchar" precision="100" phptype="string" null="false" default=""/>
		<field key="description" dbtype="text" phptype="text" null="true" default=""/>
		<field key="active" dbtype="tinyint" precision="1" phptype="boolean" null="true" default="1"/>

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

</model>

При выполнении build.transport.php вижу такие ошибки:

[2015-09-22 11:29:47] (INFO @ /msPresentation/_build/build.transport.php) Created table `modx_ms2_mspresentation_items`
SQL: CREATE TABLE `modx_ms2_mspresentation_items` (`id` INTEGER unsigned NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL DEFAULT '', `description` TEXT NULL, `active` TINYINT(1) NULL DEFAULT '1', PRIMARY KEY (`id`), INDEX `name` (`name`), INDEX `active` (`active`)) ENGINE=MyISAM

[2015-09-22 11:29:47] (ERROR in xPDOManager_mysql::removeField @ /home/s/suzukijk/arivera-test/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 394) Error removing field msPresentationItem->active: Array
(
    [0] => 42000
    [1] => 1090
    [2] => You can't delete all columns with ALTER TABLE; use DROP TABLE instead
)

[2015-09-22 11:29:47] (ERROR in xPDOManager_mysql::addIndex @ /home/s/suzukijk/arivera-test/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 329) Error adding index PRIMARY to msPresentationItem: Array
(
    [0] => 42000
    [1] => 1072
    [2] => Key column 'id' doesn't exist in table
)

[2015-09-22 11:29:47] (ERROR in xPDOManager_mysql::addIndex @ /home/s/suzukijk/arivera-test/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 329) Error adding index name to msPresentationItem: Array
(
    [0] => 42000
    [1] => 1072
    [2] => Key column 'name' doesn't exist in table
)

[2015-09-22 11:29:47] (ERROR in xPDOManager_mysql::addIndex @ /home/s/suzukijk/arivera-test/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 329) Error adding index active to msPresentationItem: Array
(
    [0] => 42000
    [1] => 1061
    [2] => Duplicate key name 'active'
)

[2015-09-22 11:29:50] (ERROR @ /msPresentation/_build/build.transport.php) [OnSiteRefresh][2015-09-22 11:29:50] (INFO @ /msPresentation/_build/build.transport.php) refresh_default: MinifyX

[2015-09-22 11:29:50] (ERROR @ /msPresentation/_build/build.transport.php) [OnSiteRefresh][2015-09-22 11:29:50] (INFO @ /msPresentation/_build/build.transport.php) refresh_default: pdoTools

Пакет устанавливается, но при установке из трех представленных полей (name, description, active) в таблице создается только поле active. Пробовал вручную удалять таблицу и переустанавливать, заново генерировать схему и прочее — безрезультатно.

Что я упустил?

Всем заранее спасибо.
Павел Ширяев
22 сентября 2015, 11:40
modx.pro
3
3 080
0

Комментарии: 18

Сергей Шлоков
22 сентября 2015, 18:48
0
Это уже новый modExtra?
    Михаил
    22 сентября 2015, 19:15
    0
    Да, именно в новом так делает. Была такая же история, но так как мне таблицы не нужны были, я пока отложил решение проблемы.
      Павел Ширяев
      22 сентября 2015, 19:17
      0
      Сергей, я его брал два дня назад у Василия на гитхабе.

      Статья эта лежит у меня в избранных, но так и не разобрался, были ли внесены эти изменения в изначальный modExtra.

      Вообще, там странная штука, сейчас попробую развернуть на каком нибудь другом сервере. Тут какой-то глюк MySQL налицо, поскольку если удалить поле «active» через PHPMyAdmin, то магическим образом в MyAdmin`е становятся видны name и description. Если затем вручную добавить active, то в админке на странице компонента даже проходит создание и сохранение элемента, но в таблице элемент после этого не появляется.

      Вообще, у меня это полностью стоковый modExtra, только переименованный путем rename_it.php, я просто смотрю, как он себя ведет и что умеет. Я просто удалил стоковую схему и сгенерировал через build.model.php новую, а затем попытался собрать и установить через build.transport.php. Так что сам я напортачить, вроде бы, не должен был.
        Павел Ширяев
        22 сентября 2015, 19:26
        0
        Попробовал на другом — совершенно та же картина. Кстати, совершенно чистый modExtra выдает те же ошибки при попытке установки «из коробки», как есть, без всяких изменений, так что не в переименовании дело.
          Сергей Шлоков
          22 сентября 2015, 19:31
          0
          Обнови файл resolve.tables.php
            Павел Ширяев
            22 сентября 2015, 20:00
            0
            Теперь такие ошибки в консоли при установке:

            Консоль запущена...
            Пробуем установить пакет с подписью: modextra-1.0.0-beta
            Пакет найден... сейчас идёт подготовка к его установке.
            Загрузка рабочего пространства пакета...
            Рабочее пространство загружено, сейчас устанавливаем пакет...
            Error adding field modExtraItem->id: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist ) 
            Error adding field modExtraItem->name: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist ) 
            Error adding field modExtraItem->description: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist ) 
            Error adding field modExtraItem->active: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist ) 
            Error adding index PRIMARY to modExtraItem: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist ) 
            Error adding index name to modExtraItem: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist ) 
            Error adding index active to modExtraItem: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist ) 
            Успешно установлен пакет modextra-1.0.0-beta
            suzukijk_shi_me — это название БД. Что-то тут не так…
              Сергей Шлоков
              22 сентября 2015, 20:04
              0
              Я уже написал, что доработал. Обнови еще разок этот файл. Извини, что тестирую на тебе, хочется побыстрее сделать.
                Павел Ширяев
                22 сентября 2015, 20:22
                0
                Так это уже с обновленным там внизу.

                Вот только что скопировал из репозитория минуту назад, обновил на сервере, пересобрал. Лог:

                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Skipping /home/s/suzukijk/shiriaev.me/public_html/modExtra-master/core/components/modextra/model/modextra/modextraitem.class.php; file already exists.
                Move existing class files to regenerate them.
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Model generated.
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Создан новый пакет с подписью: modextra-1.0.0-beta
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Зарегистрировано пространство имён пакета: modextra
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Пространство имён «modextra» упаковано в пакет.
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Created Transport Package and Namespace.
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Packaged in 0 System Settings.
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Packaged in menu "modextra".
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Created category.
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Packaged in 1 snippets.
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Packaged in 1 chunks.
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Packaged in 0 plugins.
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Added resolver "tables" to category.
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Added resolver "chunks" to category.
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Added package attributes and setup options.
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Packing up transport package zip...
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Загрузка рабочего пространства пакета...
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Рабочее пространство загружено, сейчас устанавливаем пакет...
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Skipping vehicle object of class modAction (data object exists and cannot be upgraded); criteria: Array
                (
                    [namespace] => modextra
                    [controller] => index
                )
                
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Skipping vehicle object of class modMenu (data object exists and cannot be upgraded); criteria: Array
                (
                    [text] => modextra
                )
                
                [2015-09-22 17:19:37] (INFO @ /modExtra-master/_build/build.transport.php) Skipping vehicle object of class modChunk (data object exists and cannot be upgraded); criteria: Array
                (
                    [name] => tpl.modExtra.item
                )
                
                [2015-09-22 17:19:37] (ERROR in xPDOManager_mysql::addField @ /home/s/suzukijk/shiriaev.me/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 302) Error adding field modExtraItem->id: Array
                (
                    [0] => 42S02
                    [1] => 1146
                    [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist
                )
                
                [2015-09-22 17:19:37] (ERROR in xPDOManager_mysql::addField @ /home/s/suzukijk/shiriaev.me/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 302) Error adding field modExtraItem->name: Array
                (
                    [0] => 42S02
                    [1] => 1146
                    [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist
                )
                
                [2015-09-22 17:19:37] (ERROR in xPDOManager_mysql::addField @ /home/s/suzukijk/shiriaev.me/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 302) Error adding field modExtraItem->description: Array
                (
                    [0] => 42S02
                    [1] => 1146
                    [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist
                )
                
                [2015-09-22 17:19:37] (ERROR in xPDOManager_mysql::addField @ /home/s/suzukijk/shiriaev.me/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 302) Error adding field modExtraItem->active: Array
                (
                    [0] => 42S02
                    [1] => 1146
                    [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist
                )
                
                [2015-09-22 17:19:37] (ERROR in xPDOManager_mysql::addIndex @ /home/s/suzukijk/shiriaev.me/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 330) Error adding index PRIMARY to modExtraItem: Array
                (
                    [0] => 42S02
                    [1] => 1146
                    [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist
                )
                
                [2015-09-22 17:19:37] (ERROR in xPDOManager_mysql::addIndex @ /home/s/suzukijk/shiriaev.me/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 330) Error adding index name to modExtraItem: Array
                (
                    [0] => 42S02
                    [1] => 1146
                    [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist
                )
                
                [2015-09-22 17:19:37] (ERROR in xPDOManager_mysql::addIndex @ /home/s/suzukijk/shiriaev.me/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 330) Error adding index active to modExtraItem: Array
                (
                    [0] => 42S02
                    [1] => 1146
                    [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist
                )
                
                [2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) refresh_auto_publish
                [2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) -> refresh_published
                [2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) -> refresh_unpublished
                [2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) refresh_system_settings: refresh_success
                [2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) refresh_context_settings
                [2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) -> mgr: refresh_success
                [2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) -> web: refresh_success
                [2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) refresh_lexicon_topics: refresh_success
                [2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) COMPLETED
                [2015-09-22 17:19:38] (INFO @ /modExtra-master/_build/build.transport.php) 
                
                Execution time: 0.1082 s

                Я тоже заинтересован, так что без проблем, давай тестировать. Кстати, скайп: plintus_cat. Там будет быстрее обмениваться информацией.
                  Сергей Шлоков
                  22 сентября 2015, 20:27
                  0
                  Блин, к вечеру внимательность падает. Теперь все должно работать.
                    Павел Ширяев
                    22 сентября 2015, 20:35
                    0
                    Обновил, пересобрал, установил. Такие ошибки:

                    Error removing field modExtraItem->active: Array ( [0] => 42000 [1] => 1090 [2] => You can't delete all columns with ALTER TABLE; use DROP TABLE instead )
                    Error adding index PRIMARY to modExtraItem: Array ( [0] => 42000 [1] => 1072 [2] => Key column 'id' doesn't exist in table ) 
                    Error adding index name to modExtraItem: Array ( [0] => 42000 [1] => 1072 [2] => Key column 'name' doesn't exist in table )
                    Теперь не открывается страница компонента в админке. Просто белый экран.
                      Сергей Шлоков
                      22 сентября 2015, 20:41
                      0
                      Давай я тебя больше мучать не буду. Сам буду собирать. Через часик вернусь и займусь.
                        Павел Ширяев
                        22 сентября 2015, 20:43
                        0
                        :) Буду ждать результатов. А то я вчера весь вечер и сегодня полдня весь мозг сломал, пытаясь понять, что же я делаю не так в, казалось бы, беспроигрышном варианте :)
                          Сергей Шлоков
                          22 сентября 2015, 22:38
                          0
                          Обновись. Проверил, все работает.
                          Павел Ширяев
                          22 сентября 2015, 22:49
                          0
                          Нет, не все :) Не создается поле id, в логе:

                          [2015-09-22 19:46:32] (ERROR in xPDOManager_mysql::addField @ /home/s/suzukijk/shiriaev.me/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 302) Error adding field modExtraItem->id: Array
                          (
                              [0] => 42000
                              [1] => 1075
                              [2] => Incorrect table definition; there can be only one auto column and it must be defined as a key
                          )
                          
                          [2015-09-22 19:46:32] (ERROR in xPDOManager_mysql::addIndex @ /home/s/suzukijk/shiriaev.me/public_html/core/xpdo/om/mysql/xpdomanager.class.php : 330) Error adding index PRIMARY to modExtraItem: Array
                          (
                              [0] => 42000
                              [1] => 1072
                              [2] => Key column 'id' doesn't exist in table
                          )
                          Сергей Шлоков
                          22 сентября 2015, 23:11
                          0
                          Тут проблема в addField(). Он не может добавить автоинкрементный столбец. Выход — удали таблицу и пересоздай пакет или самостоятельно создай в таблице столбец id и сделай его PRIMARY. Остальные колонки создаются нормально.
                          Павел Ширяев
                          22 сентября 2015, 23:21
                          0
                          Если удалить таблицу вручную и пересобрать пакет, чтобы он создал таблицу заново, — все работает! Спасибо за оперативную и неоценимую помощь, все супер! :)
          Сергей Шлоков
          22 сентября 2015, 19:59
          0
          Еще доработал, обнови еще разок этот файл.
            Павел Ширяев
            22 сентября 2015, 20:06
            0
            То же самое:

            Error adding field modExtraItem->id: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist ) 
            Error adding field modExtraItem->name: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist ) 
            Error adding field modExtraItem->description: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist ) 
            Error adding field modExtraItem->active: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist ) 
            Error adding index PRIMARY to modExtraItem: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist ) 
            Error adding index name to modExtraItem: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist ) 
            Error adding index active to modExtraItem: Array ( [0] => 42S02 [1] => 1146 [2] => Table 'suzukijk_shi_me.modx_modextra_items' doesn't exist )
            Пересобрал пакет и установил его.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        18