Я пытаюсь использовать полиморфное отношение HasAndBelongsToMany при использовании uuids. Моя проблема заключается в том, что я не могу научить Strongloop использовать идентификатор с строкой как типом вместо числа в необходимой таблице «многие-ко-многим». Это приводит к ошибкам SQL при создании новых отношений.Strongloop: Полиморфный HasAndBelongsToMany отношение с uuids
Позвольте мне объяснить это на примере:
У меня есть две модели: CartCollection и корзина. В коллекции должны быть разные тележки, включая саму корзину. Корзина и CartCollection имеют uuids вместо простых идентификаторов. Показывать это как свойство в модели-json. Проблема заключается в полиморфных отношениях «многие-ко-многим» между ними. Я пытаюсь использовать полиморфное отношение HasAndBelongsToMany, чтобы понять это. В этой таблице я также пытаюсь переопределить тип id.
Это мой JSON-код:
{
"name": "SaleCartCollection",
"plural": "SaleCartCollections",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"id": {
"type": "string",
"length": 36,
"id": true
}
},
"validations": [],
"relations": {
"saleCartsPoly": {
"type": "hasMany",
"model":"SaleCart",
"polymorphic" : {
"as": "saleCartsPoly",
"invert": true
},
"through": "SaleCartCartCollectionLink"
}
},
"acls": [],
"methods": []
}
{
"name": "SaleCart",
"plural": "SaleCarts",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"id": {
"type": "string",
"length": 36,
"id": true
}
},
"validations": [],
"relations": {
"SaleCartCollections": {
"type": "hasAndBelongsToMany",
"model": "SaleCartCollection",
"polymorphic": {
"as":"saleCartsPoly",
"foreignKey" : "saleCartsPolyId",
"discriminator" : "saleCartsPolyType"
},
"through": "SaleCartCartCollectionLink"
}
},
"acls": [],
"methods": []
}
{
"name": "SaleCartCartCollectionLink",
"base": "PersistedModel",
"properties": {
"saleCartsPolyId": {
"type": "string",
"length": 36
}
},
"validations": [],
"relations": {
},
"acls": [],
"methods": []
}
Если теперь я пытаюсь создать новую CartCollection в существующую корзину, я получаю этот выход:
loopback:connector:mysql SQL: INSERT INTO `SaleCartCartCollectionLink`(`saleCartsPolyId`,`saleCartsPolyType`,`saleCartCollectionId`) VALUES(?,?,?), params: [null,"SaleCart","bad7a6fc-1798-49c5-a0cb-fa59eba5b3a4"] +8ms
loopback:connector:mysql Error: {"code":"ER_BAD_FIELD_ERROR","errno":1054,"sqlState":"42S22","index":0} +11ms
я узнал, что это потому что Strongloop игнорирует мое определение свойства в сквозной модели. Это еще целый ряд, как вы можете видеть здесь, в модели-схемы в проводнике:
[
{
"saleCartsPolyId": 0,
"id": 0,
"saleCartsPolyType": "",
"saleCartCollectionId": ""
}
]
ли кто-нибудь имеет представление о том, если я делаю что-то неправильно, или это ошибка в Strongloop?
С наилучшими пожеланиями
Никлас
Спасибо за ответ, на самом деле основаны на этом: [ссылка] (https://docs.strongloop.com/display/APIC/HasAndBelongsToMany+relations), он должен работать с типом hasAndBelongsToMany. Правда, я настроил это для моделей с каждой стороны, возможно, он должен быть настроен только на одном из двух моделей «многие-ко-многим». В любом случае, ваше предложение, основанное на анализе файлов js, решило мою проблему. Спасибо. – kensai