與EAV模型不同,創(chuàng)建簡單的模型非常簡單。讓我們繼續(xù)為Log實體創(chuàng)建一個模型、資源模型和集合。
我們將首先創(chuàng)建<MAGELICIOUS_DIR>/Core/model/Log.php文件,其中包含以下內容:
class Log extends\ Magento\ Framework\ Model\ AbstractModel {
protected $_eventPrefix = 'magelicious_core_log';
protected $_eventObject = 'log';
protected function _construct() {
$this - > _init(\Magelicious\ Core\ Model\ ResourceModel\ Log::class);
}
}
_eventObject的使用不是強制性的,但強烈建議使用。
這些值由Magento\Framework\Model\AbstractModel事件調度器使用,并增加了我們模塊未來的可擴展性。
雖然Magento使用<ModuleName><ModelName>約定進行$eventPrefix命名,但使用<VendorName><ModuleName><ModelName>可能更安全。
按照約定,$_eventObject通常帶有模型本身的名稱。然后,我們創(chuàng)建<MAGELICIOUS_DIR>/Core/Model/ResourceModel/Log.php文件,其中包含以下內容:
這里的_init方法采用兩個參數(shù):idFieldName參數(shù)的entity_id值。
$idFieldName是指定數(shù)據(jù)庫中主列的名稱。值得注意的是,magelicious_core_log表仍然不存在,但我們稍后將對此進行說明。然后,我們將創(chuàng)建<MAGELICIOUS_DIR>/Core/Model/ResourceModel/Log/Collection.php文件,其中包含以下內容:
class Collection extends\ Magento\ Framework\ Model\ ResourceModel\ Db\ Collection\ AbstractCollection {
protected function _construct() {
$this - > _init(\Magelicious\ Core\ Model\ Log::class, \Magelicious\ Core\ Model\ ResourceModel\ Log::class);
}
}
這里的_init方法接受兩個參數(shù):resourceModel的字符串名稱。Magento為此使用了<FULLY_QUALIFIED_CLASS_NAME>::CLASS語法,
因為它使用了一個漂亮的解決方案,而不是四處傳遞類字符串。
碼小課magento專區(qū):
