如何在控制器中向 Shopware 6 产品添加新的交叉销售?
How to add new crossSellings to Shopware 6 product in a Controller?
我有一个产品 ID 链接到其他产品 ID 的字典。对于每个产品,我想使用上述关系中的 id 创建新的交叉销售(产品列表)。
是否可以在控制器中更新产品交叉销售?
应该通过更新方法还是其他方式来完成?
$this->productRepository->update([$productData], Context::createDefaultContext());
Update 或 Upsert 似乎也没有对产品做任何事情。
$crossSellingData = [
'id' => $crossSellingIds[0],
'name' => 'First Cross Selling',
'position' => 1,
'type' => 'productList',
'active' => true,
'assignedProducts' => [
[
'productId' => "5f5365e2adb446f6958faa4257c0af6d",
'position' => 1
]
],
];
$productRepository->upsert([['id' => $productId, 'crossSelling' => $crossSellingData]], Context::createDefaultContext());
您可以使用 productCrossSellingRepository
(Table: product_cross_selling
) 代替。
$newCrossSelling = [
'productId' => $mainProductId,
'active' => true,
'name' => 'First Cross Selling',
'type' => 'productList',
'position' => 1,
'assignedProducts' => [
[
'productId' => $firstCrossSellingProductId,
'position' => 1,
],
[
'productId' => $secondCrossSellingProductId,
'position' => 2,
],
]
];
$this->productCrossSellingRepository->create([$newCrossSelling], Context::createDefaultContext());
还应该可以在产品存储库中添加交叉销售。
我在您的原始代码中看到两个问题:
- 关联名为
crossSellings
,您使用 crossSelling
,因为没有名为 crossSelling
的字段,存储库忽略该键,这样您的更新就没有效果
- 关联太多,这意味着存储库需要
crossSellings
个列表,而不是一个交叉销售。
因此,您对原始 upsert 调用的这些小改动应该可以解决您的问题:
$productRepository->upsert([['id' => $productId, 'crossSellings' => [$crossSellingData]]], Context::createDefaultContext());
注意 crossSelling-Association 名称中的尾随 s
和 crossSellingData
周围额外的 []
数组
我有一个产品 ID 链接到其他产品 ID 的字典。对于每个产品,我想使用上述关系中的 id 创建新的交叉销售(产品列表)。
是否可以在控制器中更新产品交叉销售?
应该通过更新方法还是其他方式来完成?
$this->productRepository->update([$productData], Context::createDefaultContext());
Update 或 Upsert 似乎也没有对产品做任何事情。
$crossSellingData = [
'id' => $crossSellingIds[0],
'name' => 'First Cross Selling',
'position' => 1,
'type' => 'productList',
'active' => true,
'assignedProducts' => [
[
'productId' => "5f5365e2adb446f6958faa4257c0af6d",
'position' => 1
]
],
];
$productRepository->upsert([['id' => $productId, 'crossSelling' => $crossSellingData]], Context::createDefaultContext());
您可以使用 productCrossSellingRepository
(Table: product_cross_selling
) 代替。
$newCrossSelling = [
'productId' => $mainProductId,
'active' => true,
'name' => 'First Cross Selling',
'type' => 'productList',
'position' => 1,
'assignedProducts' => [
[
'productId' => $firstCrossSellingProductId,
'position' => 1,
],
[
'productId' => $secondCrossSellingProductId,
'position' => 2,
],
]
];
$this->productCrossSellingRepository->create([$newCrossSelling], Context::createDefaultContext());
还应该可以在产品存储库中添加交叉销售。 我在您的原始代码中看到两个问题:
- 关联名为
crossSellings
,您使用crossSelling
,因为没有名为crossSelling
的字段,存储库忽略该键,这样您的更新就没有效果 - 关联太多,这意味着存储库需要
crossSellings
个列表,而不是一个交叉销售。
因此,您对原始 upsert 调用的这些小改动应该可以解决您的问题:
$productRepository->upsert([['id' => $productId, 'crossSellings' => [$crossSellingData]]], Context::createDefaultContext());
注意 crossSelling-Association 名称中的尾随 s
和 crossSellingData
[]
数组