0

我在 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());
        }

有没有办法在店面各处的运行时动态更改图像?

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

4

1 回答 1

0

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

于 2020-09-07T05:19:21.790 回答