Tengo bastante experiencia con Magento pero me di cuenta de que no entiendo qué forma de cargar un modelo es la correcta y por qué. He leído todo lo que pude sobre el tema, pero las personas que explican cosas como esta nunca profundizan lo suficiente como para explicar por qué usar este método específico en lugar de otro. Supongamos que no hay un repositorio para el modelo que quiero cargar.
Hasta ahora, siempre estaba usando model en constructor y luego simplemente lo cargaba.
public function __construct(
\Vendor\Module\Model\Something $somethingModel
) {
$this->somethingModel = $somethingModel;
}
public function getTestById($id) {
return $this->somethingModel->load($id);
}
Y siempre funcionó según lo previsto, también estoy bastante seguro de que, o al menos se usó comúnmente en el núcleo.
Pero luego vi a uno de mis colegas usando
modelFactory->create()->load($id)
Según tengo entendido, las fábricas se están utilizando para crear una nueva entidad, por ejemplo, si quisiera crear un nuevo producto, puedo crear la fábrica, llenarla con datos y luego guardarla. Pero, de nuevo, comencé a investigar el tema y vi un ejemplo de Fabian Schmengler ( ¿Cuándo deberíamos usar un repositorio y una fábrica en Magento 2? ) Que estaba cargando el modelo de esta manera y también desalentó a otros de simplemente cargar los modelos, no lo hizo. No explique por qué, además de decir que "no forma parte del contrato de servicio". Según tengo entendido, los repositorios son parte de los contratos de servicio, por lo que no veo ninguna conexión aquí cuando se trata de cargar modelos que no están disponibles a través de un repositorio.
Para agregar más confusión, también encontré una forma de cargar el modelo obteniendo el resourceModel de la modelFactory creada, fue presentada por Vinai Kopp ( ¿Cómo implementar un contrato de servicio para un módulo personalizado en Magento 2? ) Y ahora estoy completamente perdido ya que siempre he leído que no debería usar modelos de recursos directamente.
Entonces, sí, ¿podría alguien decirme cuál es la forma correcta y por qué debería usarlo en lugar de todos los otros métodos?