在运行时从外部 URL 在 Shopware 6 店面的任何地方加载产品图像,而不将其保存在文件系统中
Load product image everywhere in the Shopware 6 storefront from external URL at runtime without saving it in filesystem
我正在 saleschannel.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()
而没有在文件系统中保存实际图像。
我正在 saleschannel.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()
而没有在文件系统中保存实际图像。