ฉันมีประสบการณ์ค่อนข้างมากกับ Magento แต่ฉันรู้ว่าฉันไม่เข้าใจวิธีการโหลดแบบจำลองที่ถูกต้องและทำไม ฉันได้อ่านทุกสิ่งที่ฉันสามารถทำได้เกี่ยวกับหัวข้อนี้ แต่ผู้คนอธิบายสิ่งต่าง ๆ เช่นนี้ไม่เคยลึกพอที่จะอธิบายได้ทำไมต้องใช้วิธีการเฉพาะนี้แทนวิธีอื่น สมมติว่าไม่มีที่เก็บสำหรับรุ่นที่ฉันต้องการโหลด
จนถึงตอนนี้ฉันมักจะใช้ model ในตัวสร้างแล้วก็โหลดมัน
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 ( เมื่อเราควรใช้ Repository และ Factory ใน Magento 2? ) ผู้โหลดแบบจำลองด้วยวิธีนี้และไม่สนับสนุนคนอื่นจากการโหลดแบบจำลองเขาไม่ได้ทำ ไม่อธิบายว่าทำไมนอกจากบอกว่ามันไม่ใช่ส่วนหนึ่งของสัญญาการบริการ เท่าที่ฉันเข้าใจที่เก็บข้อมูลเป็นส่วนหนึ่งของสัญญาบริการดังนั้นฉันจึงไม่เห็นการเชื่อมต่อใด ๆ ที่นี่เมื่อพูดถึงการโหลดรุ่นที่ไม่สามารถใช้งานได้ผ่านที่เก็บข้อมูล
เพื่อเพิ่มความสับสนให้มากขึ้นฉันได้ค้นพบวิธีการโหลดโมเดลโดยรับ resourceModel จาก modelFactory ที่สร้างขึ้นมันถูกนำเสนอโดย Vinai Kopp ( วิธีการใช้สัญญาบริการสำหรับโมดูลที่กำหนดเองใน Magento 2 ) และตอนนี้ฉัน สูญเสียไปอย่างสิ้นเชิงเนื่องจากฉันได้อ่านเสมอว่าฉันไม่ควรใช้โมเดลทรัพยากรโดยตรง
ใช่มีใครบอกฉันว่าวิธีไหนที่ถูกต้องและทำไมฉันจึงควรใช้วิธีนี้แทนวิธีอื่นทั้งหมด