タグ付けされた質問 「repository」

5
Magento 2でリポジトリとファクトリを使用する場合
Magento 2でいくつかのチュートリアルを行ったところ、少し混乱しました。基本的に、ビジネスエンティティを読み書きできる方法は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」
製品のリストを取得するために製品リポジトリを使用しようとしています。AND条件と組み合わせた2つのフィルターに基づいて取得したいのですが、うまくいかないようです。フィルターグループの仕組みを理解できませんか?または、これは報告されるべきバグですか? 具体的には、(簡単にするために愚かな例)フィルタービルダー、フィルターグループビルダー、および検索条件ビルダーを挿入するコンストラクターがあります。 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; } 次に、メソッドの後半で、フィルタービルダーを使用して2つのフィルターを作成します。 $filter1 = $this->filterBuilder->setField('sku') ->setValue('24-MB01') ->setConditionType('eq') ->create(); $filter2 = $this->filterBuilder->setField('sku') ->setValue('WT08-XS-Black') ->setConditionType('eq') ->create(); 次に、フィルターグループビルダーを使用して、これら2つのフィルターで構成されるフィルターグループを構築します。 $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) 私のコードでは、両方の方法で機能するクラスがあります。また、時には異なる方法が異なる動作を意味することにも気づきました。リポジトリを使用した方法で、データの追加の検証が提供されていますか? 私はそれをどのようにすべきですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.