提问人:tee 提问时间:6/30/2023 更新时间:6/30/2023 访问量:174
shopware 6 如何使用他们的 ID 查询和捕获与订单相关的其他详细信息
shopware 6 how do I query and capture other details related to an order using their ids
问:
您好,我一直在使用一个商店项目。我正在使用事件订阅者。在我的课堂上,我试图挑选商店里最新的订单
CheckoutOrderPlacedEvent::class => 'OnOrderReceived',
public function OnOrderReceived(CheckoutOrderPlacedEvent $event): void
我能够获得一些详细信息,例如有关订单的详细信息。但是当我试图捕捉细节时
"billing address". getOrder()->getBillingAddress()
'salesChannel getOrder()->getSalesChannel()
它们是空的,但我能够获得它们各自的 IDS
$event->getOrder()->getSalesChannelId(),
$event->getOrder()->getBillingAddressId()
请问我如何使用此 IDS 进行查询以获取它们各自的详细信息?
谢谢
答:
1赞
dneustadt
6/30/2023
#1
分别注入 和 到您的订阅者中。然后使用存储库获取相应的实体。sales_channel.repository
order_address.repository
<services>
<service id="Swag\BasicExample\Subscriber\MySubscriber">
<argument type="service" id="sales_channel.repository"/>
<argument type="service" id="order_address.repository"/>
<tag name="kernel.event_subscriber"/>
</service>
</services>
<?php declare(strict_types=1);
namespace Swag\BasicExample\Subscriber;
use Shopware\Core\Checkout\Cart\Event\CheckoutOrderPlacedEvent;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class MySubscriber implements EventSubscriberInterface
{
public function __construct(
private readonly EntityRepository $salesChannelRepository,
private readonly EntityRepository $orderAddressRepository
) {
}
public static function getSubscribedEvents(): array
{
return [
CheckoutOrderPlacedEvent::class => 'orderPlaced',
];
}
public function orderPlaced(CheckoutOrderPlacedEvent $event): void
{
$salesChannel = $this->salesChannelRepository
->search(new Criteria([$event->getOrder()->getSalesChannelId()]), $event->getContext())
->first();
$orderBillingAddress = $this->orderAddressRepository
->search(new Criteria([$event->getOrder()->getBillingAddressId()]), $event->getContext())
->first();
// ...
}
}
评论
0赞
tee
6/30/2023
您好@dneustadt感谢您的解释。正在尝试您解释的内容,但随后从 MyCustomBundle\Subscriber\MySubscriber::__construct() 中的构造抛出异常:参数 #1 ($salesChannelRepository) 必须是给定的 Shopware\Core\Framework\DataAbstractionLayer\EntityRepository、Symfony\Bridge\Monolog\Logger 类型。可能是什么问题
0赞
dneustadt
6/30/2023
您注入了错误的服务作为第一个参数。参数的顺序很重要。services.xml
0赞
tee
6/30/2023
非常感谢您的解决方案,$salesChannel返回信息,但当我进行查询时,$orderBillingAddress返回信息。这可能意味着什么,我敢肯定我在下订单时已经装满了
0赞
tee
6/30/2023
在所有存储库中,我无法让运输和计费存储库正常工作,它返回了一个空数据集
0赞
tee
6/30/2023
没关系,我让它使用客户地址存储库工作
评论