Связанные объекты (XPDO)
Всем привет.
Столкнулся со сложностью, есть composite объект, допустим «Товар».
Есть 2ой composite объект, «Опция товара».
Оба этих composite объекта «возглавляют» таблицу options2product. (по product_id и по option_id)
У таблицы нет primary key, зачем он нужен здесь?
Проблема: связанный объект ни удаляется (при удалении композитного или удалении напрямую), ни обновляется (через $object->save());
Подобную проблему встретил лишь у Василия, но там решение с primary key. Как быть, если мне не нужен primary, и все значения в таблице options2product НЕ уникальны?
Столкнулся со сложностью, есть composite объект, допустим «Товар».
Есть 2ой composite объект, «Опция товара».
Оба этих composite объекта «возглавляют» таблицу options2product. (по product_id и по option_id)
У таблицы нет primary key, зачем он нужен здесь?
Проблема: связанный объект ни удаляется (при удалении композитного или удалении напрямую), ни обновляется (через $object->save());
Подобную проблему встретил лишь у Василия, но там решение с primary key. Как быть, если мне не нужен primary, и все значения в таблице options2product НЕ уникальны?
Комментарии: 9
Да, в xPDO какая-то фигня с такими таблицами. Добавляйте primary key ID. Просто нигде его не используйте, пусть он будет autoincrement — вряд ли принесёт вам какие-то проблемы своим присутствием.
Ну или везде помнить об этой таблице и вносить изменения или удалять вручную
Ну или везде помнить об этой таблице и вносить изменения или удалять вручную
Спасибо, Илья! А то со своей упрямостью надеялся, что решение есть.
Да я на него же кинул ссылку. Пробовал ставить index=«pk» — modx не разрешает дубли, оно и логично, раз это primary. Пробовал index=«fk» — толку не дает, как и index=«index». День потратил методом тыка и вчитываясь в доки modx. Но все-равно большое спасибо
А, я не внимателен.
Ну или можно сделать xPDOObject с первичным ключом, который будет уникален. Например, product_id, option_id и value, но такой ключ будет дольше и медленнее чем простой id.
У таблицы нет primary key, зачем он нужен здесь?Вот для того и нужен, чтобы было понятно какую именно строку удалить при наличии дубликатов. В твоём случае лучше использовать xPDOSimpleObject.
Ну или можно сделать xPDOObject с первичным ключом, который будет уникален. Например, product_id, option_id и value, но такой ключ будет дольше и медленнее чем простой id.
Да, уже смирился с уникальным ключом.
Я хотел еще спросить, зачем нужен index=«fk» (foreign key), но нашел ответ в доке. (Тыкаю не для Вас, не подумайте. Доки у modx не из простых, для меня сложная структура. Может кому понадобится). Непонятно только осталось зачем index=«index» если сортировкой занимается mysql, modx и без индекса будет отправлять запрос по сортировке.
Я хотел еще спросить, зачем нужен index=«fk» (foreign key), но нашел ответ в доке. (Тыкаю не для Вас, не подумайте. Доки у modx не из простых, для меня сложная структура. Может кому понадобится). Непонятно только осталось зачем index=«index» если сортировкой занимается mysql, modx и без индекса будет отправлять запрос по сортировке.
Непонятно только осталось зачем index=«index»Это для генерации модели. А из модели создаются таблицы при установке дополнения. Ну и такое обозначение, вроде как, устарело — для индексов там отдельные блоки сейчас.
index="fk" я ни разу не использовал. По идее, это для таблиц InnoDB, которые в MODX по умолчанию тоже пока не используются.
Спасибо, разжевали =)
index=«fk» встречаю только в исходниках modx, оттуда и вопросы
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.