Связанные объекты (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
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Ну или везде помнить об этой таблице и вносить изменения или удалять вручную
Вот для того и нужен, чтобы было понятно какую именно строку удалить при наличии дубликатов. В твоём случае лучше использовать xPDOSimpleObject.
Ну или можно сделать xPDOObject с первичным ключом, который будет уникален. Например, product_id, option_id и value, но такой ключ будет дольше и медленнее чем простой id.
Я хотел еще спросить, зачем нужен index=«fk» (foreign key), но нашел ответ в доке. (Тыкаю не для Вас, не подумайте. Доки у modx не из простых, для меня сложная структура. Может кому понадобится). Непонятно только осталось зачем index=«index» если сортировкой занимается mysql, modx и без индекса будет отправлять запрос по сортировке.
index="fk" я ни разу не использовал. По идее, это для таблиц InnoDB, которые в MODX по умолчанию тоже пока не используются.