We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 30247
    • 74 Posts

    Может кто-нибудь подсказать как правильно прописать связи в xml-файле для таблицы-справочника?
    Например берем modx_users, id юзера используется во многих других таблицах.
    Это для каждой связи нужен отдельный альяс?
    Есть ли gui для выстраивания связей?
      • 30247
      • 74 Posts
      /*offtopic
      Тихо сам с собою я веду беседы...
      Забавная это штука XPDO.... Уже задумался: а зачем весь остальной код... Взять чистый index.php инициировать xpdo и вперед...
      */

      Не знаю правильно или нет, но прописал все связи и прямые и обратные и если на таблицу идет несколько связей прописывал все.
      Выложу свои мысли (вдруг меня поправят или кому-нибудь пригодится).
      Например таблица:
      "id - name" для адресных списков. содержит название улиц, городов, районов, округов и прочих названий и наименований.
      Сама таблица в схеме выглядит так:
      <object class="GeoLibrary" table="geo_library" extends="xPDOObject">
      		<field key="Id" dbtype="int" precision="11" phptype="integer" null="false" index="pk"  generated="native" />
      		<field key="Name" dbtype="varchar" precision="255" phptype="string" null="true" index="index" />


      связи в ней прописал так:
      		<aggregate alias="geo_okrug" class="GeoObjects" local="id" foreign="okrug_id" cardinality="many" owner="local" />
      		<aggregate alias="geo_area" class="GeoObjects" local="id" foreign="area_id" cardinality="many" owner="local" />
      		<aggregate alias="geo_street" class="GeoObjects" local="id" foreign="street_id" cardinality="many" owner="local" />


      Таблица, описывающая адрес некоего здания, выглядит примерно так:
      id - okrug_id(город) - area_id(район) - street_id(улица) - house(номер дома)
      Связи из нее выглядят похоже:
      		<aggregate alias="geo_okrug" class="GeoLibrary" local="okrug_id" foreign="id" cardinality="one" owner="foreign" />
      		<aggregate alias="geo_area" class="GeoLibrary" local="area_id" foreign="id" cardinality="one" owner="foreign" />
      		<aggregate alias="geo_street" class="GeoLibrary" local="street_id" foreign="id" cardinality="one" owner="foreign" />


      По скорости:
      Выборка с 7 JOIN'ами, напрямую голым php-SQL, у меня вышла в 14 раз шустрее нежели через xPDO...
      Но код на xPDO более удобочитаем (после вдумчивого изучения getCollectionGraph) и легче изменяем...
      Но и объем кода растёт и быстродействие...Короче, никак для себя не могу определится нравится оно мне или нет.

      P.S. И кстати, гуя я на это не нашел, и как только связи в таблицах становятся более сложными - в XML можно мозг сломать. [ed. note: Tohin last edited this post 13 years, 10 months ago.]