Questions tagged «repository»

5
我们何时应该在Magento 2中使用存储库和工厂?
我已经阅读了Magento 2中的一些教程,这让我有些困惑。我可以看到基本上有两种方法可以读取/写入业务实体: 检索数据 使用工厂方法 $object = $this->myFactory->create(); $object->load($myId); 使用存储库方法 $repo = $this->myRepository(); $object = $repo->getById($myId); 保存数据 使用工厂方法 $object = $this->myFactory->create(); $object->load($myId); $object->setData('something', 'somethingDifferent')->save(); 使用存储库方法 $repo = $this->myRepository(); $object = $repo->getById($myId); $object->setData('something', 'somethingDifferent'); $repo->save($object); 我还看到,可以使用依赖项注入来注入存储库和工厂类。至少对我来说这令人困惑。 我们什么时候应该使用存储库方法和工厂方法?我们需要遵循的最佳实践是什么?

1
Magento 2中的收藏历史吗?
我知道目前Magento 2(2.1.2)中的许多代码或多或少是从Magento 1移植的,并且将来很多代码将被等效代码替代。在这方面,我想知道Magento 2系列的未来。 让我解释: Magento 1: 在Magento 1中,我们习惯于获得这样的集合: $products = Mage::getModel('catalog/product')->getCollection(); 然后,我们可以对集合应用过滤器和其他操作: $products->addAttributeToFilter('price', ['gteq' => 10]); $products->addFieldToFilter('created_at', ['lt' => '2016-10-10']); $products->setPageSize(10); // ... etc ... 最后但并非最不重要的一点是,我们的集合将返回模型: foreach ($products as $product) { echo get_class($product); // Mage_Catalog_Model_Product } Magento 2: Magento添加了许多新的抽象层,实现了一种更可靠的工作方式。这意味着当我们想要实体列表时,我们从存储库中请求它: $productResults = $this->productRepository->getList($searchCriteria); 如果我们要应用过滤器,我们使用的一个组合SearchCriteriaBuilder,在FilterGroupBuilder中,FilterBuilder和SortOrderBuilder: $this->searchCriteriaBuilder->addSortOrder( $this->sortOrderBuilder ->setField('created_at') ->setAscendingDirection() ->create() ); …

3
有没有理由比服务合同更喜欢$ model-> load()?
我知道在Magento 2的模块之间工作的首选方法是使用服务合同。 因此,如果要加载产品,请使用产品存储库: $product = $productRepository->getById($id); 通过合同返回的实例Magento\Catalog\Api\Data\ProductInterface。 但是我也可以改用旧方法,直接调用域层: $product = $productFactory->create()->load($id); 在任何情况下这是必要还是有用的? devdocs说(突出显示): 一个模块可以直接调用另一个模块。在大多数情况下,不建议使用这种紧密耦合的解决方案,但有时是不可避免的。 [...] 您调用另一个模块的域层代码的策略在很大程度上取决于系统的独特配置和需求。 来源:http : //devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/domain_layer.html 关于一个相关问题的评论说: 使用存储库将为您提供一个产品数据模型(Api/Data/Product),该模型是转换为精简DTO的产品模型。需要考虑的东西,因为它们完全不同 但据我所见,正常情况下对象是相同的,只是每个phpDoc的返回类型不同(Magento\Catalog\Api\Data\ProductInterface/ Magento\Catalog\Model\Product)

2
过滤Magento 2对象存储库
在Magento 2中,您可以使用产品存储库按产品属性进行过滤吗? 在Magento 2中,您可以使用搜索条件对象 \Magento\Framework\Api\SearchCriteriaInterface $searchCriteria, 和一个仓库 \Magento\Catalog\Api\ProductRepositoryInterface $productRepository, 提取对象列表 $searchCriteria->getPageSize(10); $list = $productRepository->getList($searchCriteria); 但是,searchCriteria对象没有(似乎?)具有直接过滤功能。搜索条件类确实具有添加名为filterGroups的方法。 #File: lib/internal/Magento/Framework/Api/SearchCriteria.php public function getFilterGroups() { $filterGroups = $this->_get(self::FILTER_GROUPS); return is_array($filterGroups) ? $filterGroups : []; } public function setFilterGroups(array $filterGroups = null) { return $this->setData(self::FILTER_GROUPS, $filterGroups); } 但是尚不清楚究竟是什么过滤组归功于PHP的无类型数组。 我如何使用Magento 2存储库执行类似的操作 向我展示所有带有[此特定SKU]的产品 显示[此日期]之后创建的所有产品 等等

2
Magento 2:产品存储库,过滤器组和“与”
我正在尝试使用产品存储库来获取产品列表。我想基于两个过滤器并结合一个AND条件来获取数据,但是似乎没有任何效果。我不了解过滤器组如何工作?还是应该报告此错误? 具体来说,(为简单起见,这是一个愚蠢的示例)我有一个构造函数,在该构造函数中注入了过滤器构建器,过滤器组构建器和搜索条件构建器 public function __construct( \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder, \Magento\Framework\Api\FilterBuilder $filterBuilder, \Magento\Framework\Api\Search\FilterGroupBuilder $filterGroupBuilder ) { $this->searchCriteriaBuilder = $searchCriteriaBuilder; $this->filterBuilder = $filterBuilder; $this->filterGroupBuilder = $filterGroupBuilder; } 然后,在以后的方法中,我将使用过滤器构建器来构建两个过滤器 $filter1 = $this->filterBuilder->setField('sku') ->setValue('24-MB01') ->setConditionType('eq') ->create(); $filter2 = $this->filterBuilder->setField('sku') ->setValue('WT08-XS-Black') ->setConditionType('eq') ->create(); 然后,我使用过滤器组构建器来构建由这两个过滤器组成的过滤器组 $filter_group = $this->filterGroupBuilder ->addFilter($filter1) ->addFilter($filter2) ->create(); 然后,我使用了搜索条件构建器,在其上设置了过滤器组 $criteria = $this->searchCriteriaBuilder ->setFilterGroups([$filter_group]) ->setPageSize(100) ->create(); …

2
如何保存模型的新实体或更新实体?
在Magento 2中,我们有存储库类。save()如果我正确的话,Magento 1.9中大量使用的经典方法已从2.04或2.05弃用。我使用工厂创建新对象,并在设置了新属性后,例如我调用的产品save(): $productFactory->create()->setName()...->save() 另一方面,我们的存储库中也包含method save。我正在像这样概括地使用它: $product = $productFactory->create()->setName()... $productRepository->save($product) 在我的代码中,我有两种方式都可以工作的类。我也注意到有时不同的方式意味着不同的行为。使用存储库的方式是否提供了对数据的一些附加验证? 我应该采取哪种方式?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.