我在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)
据我了解,工厂正被用来创建一个新的实体,例如,如果我想创建一个新产品,那么我可以创建工厂,用数据填充它,然后保存它。但是话又说回来,我开始研究这个话题,并从Fabian Schmengler(我们何时应该在Magento 2中使用存储库和工厂?)中看到了一个示例,他以这种方式加载模型,并且不鼓励其他人简单地加载模型,他没有这样做。除了解释为什么它不是“服务合同的一部分”之外,还要说明原因。据我了解,存储库是服务合同的一部分,因此在加载通过存储库不可用的模型时,在这里看不到任何联系。
为了增加一些混乱,我还找到了一种通过从创建的modelFactory中获取resourceModel来加载模型的方法,该方法由Vinai Kopp提出(如何在Magento 2中实现自定义模块的服务合同?),现在就像我一直读到的那样,我不应该直接使用资源模型而完全迷失了方向。
是的,有人可以告诉我哪种方法正确,为什么我应该用它代替所有其他方法?