這是問題描述:
我創建了一個自定義物體和它的定義。defineFields 函式體是這樣的:
protected function defineFields(): FieldCollection {
return new FieldCollection([
(new FkField('product_family_id', 'productFamilyId', ProductFamilyDefinition::class, 'id'))->addFlags(new ApiAware(), new Required(), new PrimaryKey()),
(new StringField('area_id', 'areaId'))->addFlags(new ApiAware(), new Required(), new PrimaryKey()),
(new StringField('block_number', 'blockNumber'))->addFlags(new ApiAware(), new Required(), new PrimaryKey()),
(new StringField('text', 'text')),
new CreatedAtField(),
new UpdatedAtField(),
(new ManyToOneAssociationField('productFamily', 'product_family_id', ProductFamilyDefinition::class, 'id')),
]);
}
因此,如您所見,我們需要一個product_family_id,area_id和的復合主鍵block_number。問題是,欄位area_id和block_number需要是字串型別。但是因為PrimaryKey()標記已添加到這些欄位,Shopware 不想執行插入操作,因為 shopware 現在希望這兩個欄位具有 UUID 長度(16 個字符)。如果我們洗掉PrimaryKey()標志area_id,那么block_number欄位可以具有任何大小,因為它們應該。
此問題的請求/回應操作示例可在此處找到:
示例請求:
URL: http://localhost/api/_action/sync
BODY: [{"entity":"product_family_additional_info","action":"upsert","payload":[{"productFamilyId":"cb5e21bda1d8488ab5dda9d3fb4e4fe4","areaId":"22","blockNumber":"33","text":"text121"}]}]
示例回應:
{
"success": false,
"data": [
{
"result": [
{
"entities": [],
"errors": [
{
"status": "400",
"code": "FRAMEWORK__UUID_INVALID_LENGTH",
"title": "Bad Request",
"detail": "UUID has a invalid length. 16 bytes expected, 2 given. Hexadecimal reprensentation: 3232",
"meta": {
"parameters": {
"length": 2,
"hex": "3232"
}
}
}
]
}
],
"extensions": []
}
],
"deleted": [],
"notFound": [],
"extensions": []
}
那么,有沒有辦法讓復合主鍵具有多種型別的列?并且當我們添加 PrimaryKey() 標志時,該列不會被強制為 UUID 長度。
uj5u.com熱心網友回復:
Shopware 期望PrimaryKey欄位是 Uuid,但在您的情況下,您可以將自己的 IdField 添加到您的定義中,并且在創建表的資料庫遷移中,您可以為當前要用作復合主鍵的 3 個欄位添加唯一約束。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/438381.html
