Связанные объекты (XPDO)

Всем привет.
Столкнулся со сложностью, есть composite объект, допустим «Товар».
Есть 2ой composite объект, «Опция товара».
Оба этих composite объекта «возглавляют» таблицу options2product. (по product_id и по option_id)
У таблицы нет primary key, зачем он нужен здесь?

Проблема: связанный объект ни удаляется (при удалении композитного или удалении напрямую), ни обновляется (через $object->save());
Подобную проблему встретил лишь у Василия, но там решение с primary key. Как быть, если мне не нужен primary, и все значения в таблице options2product НЕ уникальны?
Александр
10 августа 2017, 10:43
modx.pro
1 687
0

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

Илья Уткин
11 августа 2017, 09:07
+1
Да, в xPDO какая-то фигня с такими таблицами. Добавляйте primary key ID. Просто нигде его не используйте, пусть он будет autoincrement — вряд ли принесёт вам какие-то проблемы своим присутствием.

Ну или везде помнить об этой таблице и вносить изменения или удалять вручную
    Александр
    11 августа 2017, 09:27
    +1
    Спасибо, Илья! А то со своей упрямостью надеялся, что решение есть.
      Александр
      11 августа 2017, 10:20
      +2
      Да я на него же кинул ссылку. Пробовал ставить index=«pk» — modx не разрешает дубли, оно и логично, раз это primary. Пробовал index=«fk» — толку не дает, как и index=«index». День потратил методом тыка и вчитываясь в доки modx. Но все-равно большое спасибо
        Василий Наумкин
        11 августа 2017, 10:24
        +2
        А, я не внимателен.

        У таблицы нет primary key, зачем он нужен здесь?
        Вот для того и нужен, чтобы было понятно какую именно строку удалить при наличии дубликатов. В твоём случае лучше использовать xPDOSimpleObject.

        Ну или можно сделать xPDOObject с первичным ключом, который будет уникален. Например, product_id, option_id и value, но такой ключ будет дольше и медленнее чем простой id.
          Александр
          11 августа 2017, 10:38
          0
          Да, уже смирился с уникальным ключом.
          Я хотел еще спросить, зачем нужен index=«fk» (foreign key), но нашел ответ в доке. (Тыкаю не для Вас, не подумайте. Доки у modx не из простых, для меня сложная структура. Может кому понадобится). Непонятно только осталось зачем index=«index» если сортировкой занимается mysql, modx и без индекса будет отправлять запрос по сортировке.
            Василий Наумкин
            11 августа 2017, 10:50
            +1
            Непонятно только осталось зачем index=«index»
            Это для генерации модели. А из модели создаются таблицы при установке дополнения. Ну и такое обозначение, вроде как, устарело — для индексов там отдельные блоки сейчас.

            index="fk" я ни разу не использовал. По идее, это для таблиц InnoDB, которые в MODX по умолчанию тоже пока не используются.
              Александр
              11 августа 2017, 11:00
              0
              Спасибо, разжевали =)
                Александр
                11 августа 2017, 11:01
                0
                index=«fk» встречаю только в исходниках modx, оттуда и вопросы
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        9