私はMagentoでかなりの経験を持っていますが、モデルをロードする方法が正しい方法とその理由を理解していないことに気付きました。私はトピックについてできる限りのことを読みましたが、このようなことを説明している人々は実際には説明するのに十分な深さでは決してありません。ロードしたいモデルのリポジトリがないとしましょう。
これまでは、コンストラクターで常にモデルを使用していて、単純にそれをロードしていました。
public function __construct(
\Vendor\Module\Model\Something $somethingModel
) {
$this->somethingModel = $somethingModel;
}
public function getTestById($id) {
return $this->somethingModel->load($id);
}
そして、それは常に意図したとおりに機能しました。また、コアで一般的に使用されているか、少なくとも使用されていたと確信しています。
しかし、私は同僚の一人が
modelFactory->create()->load($id)
工場が新しいエンティティの作成に使用されていることを理解している限り、たとえば、新しい製品を作成したい場合は、ファクトリを作成し、データを入力して保存できます。しかし、再び、トピックの調査を開始し、この方法でモデルをロードしていたファビアンシュメングラー(Magento 2でリポジトリとファクトリを使用する必要がある場合)の例を見ました。 tそれが「サービス契約の一部ではない」と言うことのほかに理由を説明してください。リポジトリがサービスコントラクトの一部であることを理解している限り、リポジトリからは利用できないモデルの読み込みに関しては、ここでは何の関係もありません。
さらに混乱を加えるために、作成されたmodelFactoryからresourceModelを取得してモデルをロードする方法も見つけました。VinaiKoppによって提示されました(Magento 2でカスタムモジュールのサービスコントラクトを実装する方法は?)。リソースモデルを直接使用するべきではないことをいつも読んだので、完全に失われました。
だから、ええ、誰かが正しい方法を教えてもらえますか?なぜ私が他のすべての方法の代わりにそれを使うべきなのでしょうか?