通过 ID 获取 Shopware 6 实体的推荐方法是啥?
Posted
技术标签:
【中文标题】通过 ID 获取 Shopware 6 实体的推荐方法是啥?【英文标题】:What is the recommended way to get a Shopware 6 entity by ID?通过 ID 获取 Shopware 6 实体的推荐方法是什么? 【发布时间】:2021-09-16 01:53:06 【问题描述】:我有一个实体 ID,想通过存储库获取实体对象,目前我们这样做
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('id', $propertyId));
$property = $this->propertyGroupOptionRepository->search(
$criteria,
$this->context
)->first();
if($property)
return $property->get('groupId');
有没有更好的方法,比如 Laravel 的 find
方法?
【问题讨论】:
【参考方案1】:正如您在自己的回答中已经提到的,您可以将 ID 作为参数传递给 Criteria 对象。
我建议$property = $this->propertyGroupOptionRepository->search(new Criteria([$propertyId]), $context)->first()
未实现 find 方法,我认为永远不会,因为您可能希望加载使用某些关联和/或聚合。
【讨论】:
【参考方案2】:至少可以使用 ID 过滤器创建条件而不创建 Equals 过滤器。
shopware 核心是这样的:
$product = $this->productRepository->search(new Criteria([$productId]), $context)->get($productId);
所以对于上面的例子,它会是
$property = $this->propertyGroupOptionRepository
->search(new Criteria([$propertyId]), $context)->get($propertyId);
【讨论】:
恕我直言,使用first()
函数“更好”:$product = $this->productRepository->search(new Criteria([$productId]), $context)->first();
。但是没有等效于 Laravel 的 find
函数。您必须使用存储库和标准。
是的,find()
函数中没有 buit,但您应该始终更喜欢这种将 Ids 注入 Criteria-Objects 构造函数的解决方案,因为运行时行为略有不同并且以这种方式使用标准应该比使用 EqualsFilter 更快,因为这些过滤器是如何被解析的以上是关于通过 ID 获取 Shopware 6 实体的推荐方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Shopware 6 Admin API 的文档。啥是可能的命令?
Shopware 6:在自己的自定义管理模块中获取 PHP 数据
Shopware 6:如何通过 SalesChannel 级别的 EventSubscriberInterface 检测任何类别添加/更新?