magr0s 01 декабря 2014 0 5
Всем привет.
Подскажите, как сделать отношение между таблицами при построении пакета с помощью CMPGenerator.
Достаточно просто в xml их дописать в ручную или же есть еще какие то моменты?
5 комментариев
Fi1osof1
Fi1osof 02 декабря 2014г в 02:19 #
Я очень сомневаюсь, что он умеет работать с отношениями, хотя и не проверял эти мысли (просто так думаю). Но может у кого-то будут другие мысли, подкрепленные фактами.
m
magr0s 03 декабря 2014г в 22:30 #
Это понятно. Возможно я не правильно в чем то выразился.
CMP нужен для того что бы сформировать модель (пакет) на основании Таблиц БД.
Далее я так понимаю он не принимает никакой деятельности в дальнейшей жизни пакета.
Так вот. Мой вопрос: если я открою уже сгенерированную модель в часности ...schema.xml и просто допишу в нее отношения, они работать будут?

п.с. понравился сам пакет поскольку проект предстоит многотабличный и писать модели заколебало уже… а тут такая вещь вкусная.
Fi1osof1
Fi1osof 03 декабря 2014г в 22:48 #
Как я не раз уже говорил много где, MODX не использует в своей работе XML-схему модели вообще никогда, то есть для него она что есть, что нету. Используется XML-схема только в случае, если на ее основе надо сгенерировать map-файлы. Как это работает, статья в помощь.

При работе же с CMPGenerator, у нас на выходе уже имеются готовые map-файлы и прочие классы, то есть дальше нам XML-схема вообще не нужна. Следовательно прописывать отношения нужно прям в map-файлах. Здесь уточню по вашему вопросу, что изменения в map-файлы учитываются сразу же, ибо MODX читает их при каждом обращении к нему (естественно один раз за запрос (include_once)).

И к слову сразу замечу конкретно по своей методике: таблицы часто имеют называния во множественном числе (к примеру, modx_users), при этом класс как правило имеет название в единственном числе modUser (соответственно и название файла moduser.class.php). А CMPGenerator название класса даст по названию таблицы, то есть modusers.class.php. Я это к тому, что все равно после первичной генерации модели приходится имена файлов и классов подправлять и далее они уже сопровождаются в ручном режиме. Единственное, что когда меняются структуры таблиц, то генеришь отдельный пакет (чтобы не перетирать рабочий) и описания колонок уже копипастишь из сгенеренной мапы в рабочую.
m
magr0s 03 декабря 2014г в 23:03 #
ай красота…
значит, в [class].map.inc.php
добавляем, к примеру

'aggregates' => array(
'PrimaryGroup' => 
    array (
      'class' => 'modUserGroup',
      'local' => 'primary_group',
      'foreign' => 'id',
      'cardinality' => 'one',
      'owner' => 'foreign',
    )
)

и получаем

class->getOne('PrimaryGroup');

п.с. за статью спасибо читана, да и вообще за материалы
Fi1osof1
Fi1osof 03 декабря 2014г в 23:06 #
и получаем
Да, именно так.
Но если хотите действительно освоить этот механизм, то читайте это, чтобы освоить, к примеру, вот такие фокусы.
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.