Skip to content

[Bug] 400 «Неизвестная ошибка» при сохранении связи товара #558

Description

@Ibochkarev

Описание проблемы

Во вкладке «Связи» карточки товара диалог «Связь товаров» при «Сохранить и закрыть» отвечает 400 и тостом «Неизвестная ошибка». В консоли:

[ProductLinksTab] saveLink RequestError: Неизвестная ошибка
    at Ko.request (index-….min.js)
    at async ie (product-tabs.min.js)

Кнопки «Сохранить» и «Сохранить и закрыть» зовут один saveLink() (ProductLinksTab.vue): POST /api/mgr/product-data/{id}/links с { link, slave }. Разница только в закрытии диалога после успеха.

Бэкенд: ProductDataController::createLinkProductLinkService::create. Сообщение ms3_err_unknown («Неизвестная ошибка») отдаётся, когда applyLinkType() / addLink() вернул false (неизвестный тип связи или msProductLink::save() не прошёл). linkActionResponse мапит любой ok: false в HTTP 400 без errors.

Шаги воспроизведения

  1. Открыть товар в менеджере (пример: id 22).
  2. Вкладка «Связи» → создать связь.
  3. Выбрать тип связи и товар магазина.
  4. Нажать «Сохранить и закрыть».

Ожидаемое поведение

Связь сохраняется, диалог закрывается, грид обновляется. Если сохранить нельзя, API называет причину (ms3_err_ns, ms3_err_link_equal, ms3_err_no_link, дубликат, ошибка БД), не общий unknown.

Фактическое поведение

HTTP 400:

{
  "success": false,
  "message": "Неизвестная ошибка",
  "object": {
    "success": false,
    "message": "Неизвестная ошибка",
    "code": 400,
    "errors": null
  }
}

Тело запроса (без auth/cookies): POST /api/mgr/product-data/22/links с {"link":1,"slave":124}.

Скриншоты

Диалог «Связь товаров»: тип test, товар «Диван JBL Prime», стрелка на «Сохранить и закрыть». В консоли тот же RequestError.

Окружение

  • MiniShop3: 1.12.0-beta1
  • MODX: 3.x
  • Браузер: Chrome 151 / macOS

Логи ошибок

Консоль браузера — см. стек выше.

core/cache/logs/error.log в момент сохранения связи. xPDO шлёт пустой INSERT: составной PK (link, master, slave) не попал в SQL (fromArray() без setPrimaryKeys эти поля пропускает):

[2026-08-13 17:13:13] (ERROR @ xPDO/Om/xPDOObject.php : 1447) Error HY000 executing statement:
INSERT INTO `modx_ms3_product_links` () VALUES ()
Array
(
    [0] => HY000
    [1] => 1364
    [2] => Field 'link' doesn't have a default value
)

Повтор в 17:14:47 и 17:14:54, тот же SQL и HY000/1364.

Дополнительный контекст

Проверить: тип связи id=1 (one_to_one шлёт две строки master↔slave), уникальный индекс на (link, master, slave), парсинг JSON-body в connector. Пока addLink() глотает false в ms3_err_unknown, фронт не отличит валидацию от сбоя БД.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions