在运行时从外部URL加载Shopware6店面中的所有产品映像,而不将其保存在文件系统中



我正在sales-channel.product.load事件的运行时从外部URL更改产品的图像。这一切都很好,但当下订单时,它会给出关于的错误

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`sv3_dev`.`order_line_item`, CONSTRAINT `fk.order_line_item.cover_id` FOREIGN KEY (`cover_id`) REFERENCES `media` (`id`) ON UPDATE CASCADE)

我猜这是因为我用这样的自定义实现重写了产品的媒体实体,所以在插入订单行项目时找不到媒体封面ID:

$pathInfo = pathinfo($url);
$media = new MediaEntity();
$media->setId(Uuid::randomHex());
$media->setUrl($url);
$media->setMimeType(sprintf('image/%s', $pathInfo['extension']));
$media->setFileExtension($pathInfo['extension']);
$media->setFileName($pathInfo['filename']);
$productMediaEntity = new ProductMediaEntity();
$productMediaEntity->setId(Uuid::randomHex());
$productMediaEntity->setMedia($media);
$productMediaEntity->setPosition(0);
$mediaCollection = new ProductMediaCollection([$productMediaEntity]);
$entity->setMedia($mediaCollection);
if ($entity->getCover() === null) {
$entity->setCover($productMediaEntity);
} else {
$entity->getCover()->setMedia($productMediaEntity->getMedia());
}

有没有一种方法可以在运行时动态更改店面中各处的图像?

由于某些版权条款不允许在商店下载图像,我无法将图像/媒体保存在文件系统中。我们只能在运行时加载它。

对于其他偶然发现这一点的人来说,像问题中提到的那样动态添加媒体实体适用于商店的其他部分,除非在下订单时,因为由于FK限制,它需要媒体ID。因此,我所做的是从mediaRepository创建一个media实体,并使用该ID作为订单的引用,而不是Uuid::randomHex(),而不将实际映像保存在文件系统中。

相关内容

  • 没有找到相关文章

最新更新