1. 创建数据库表
  2. 创建模型-CRUD模型
    Model是MVC架构的一条巨大路径。在Magento 2 CRUD中,模型具有许多不同的功能,例如管理数据,安装或升级模块。在本教程中,我只讨论数据管理CRUD。我们必须创建Model,Resource Model,Resource Model Conllection来管理表中的数据:
    app/code/Mageplaza/HelloWorld/Model/Post.php
    <?php
    namespace Mageplaza\HelloWorld\Model;
    class Post extends \Magento\Framework\Model\AbstractModel implements \Magento\Framework\DataObject\IdentityInterface
    {
    const CACHE_TAG = 'mageplaza_helloworld_post'; protected $_cacheTag = 'mageplaza_helloworld_post'; protected $_eventPrefix = 'mageplaza_helloworld_post'; protected function _construct()
    {
    $this->_init('Mageplaza\HelloWorld\Model\ResourceModel\Post');
    } public function getIdentities()
    {
    return [self::CACHE_TAG . '_' . $this->getId()];
    } public function getDefaultValues()
    {
    $values = []; return $values;
    }
    }

      

    该模型类将扩展AbstractModel类Magento\Framework\Model\AbstractModel并实现\Magento\Framework\DataObject\IdentityInterface。IdentityInterface将强制Model类定义getIdentities()将返回模型的唯一ID 的方法。如果模型在数据库操作后需要缓存刷新并将信息呈现到前端页面,则必须仅使用此接口。

    _construct()只要模型被实例化,就会调用该方法。每个CRUD模型都必须使用_construct()方法来调用_init()方法。这个_init()方法将定义实际从数据库中获取信息的资源模型。如上所述,我们定义了资源模型Mageplaza \ Post \ Model \ ResourceModel \ Post关于模型的最后一件事是你应该在模型中使用的一些变量:

    1。$_eventPrefix - 要触发的事件的前缀
    2。$_eventObject - 事件访问时的对象名称
    3。$_cacheTag - 在缓存中使用的唯一标识符

  3. 创建资源模型
    模型文件包含整体数据库逻辑,它不执行sql查询。资源模型将这样做。现在我们将为此表创建资源模型:
    app/code/Mageplaza/HelloWorld/Model/ResourceModel/Post.php
    

      

    <?php
    namespace Mageplaza\HelloWorld\Model\ResourceModel; class Post extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
    { public function __construct(
    \Magento\Framework\Model\ResourceModel\Db\Context $context
    )
    {
    parent::__construct($context);
    } protected function _construct()
    {
    $this->_init('mageplaza_helloworld_post', 'post_id');
    } }

      

    Magento中的每个CRUD资源模型都必须扩展抽象类\Magento\Framework\Model\ResourceModel\Db\AbstractDb,其中包含从数据库中获取信息的函数。

    与模型类一样,此资源模型类将具有必需的方法_construct()。此方法将调用_init()函数来定义该表的表名和主键。在这个例子中,我们有表mageplaza_helloworld_post和主键post_id。

  4. 创建资源模型集合 - 获取模型集合
    该集合模型被认为是一个资源模型使我们能够筛选和获取集合表中的数据。收集模型将放在:
    app/code/Mageplaza/HelloWorld/Model/ResourceModel/Post/Collection.php
    <?php
    namespace Mageplaza\HelloWorld\Model\ResourceModel\Post; class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
    {
    protected $_idFieldName = 'post_id';
    protected $_eventPrefix = 'mageplaza_helloworld_post_collection';
    protected $_eventObject = 'post_collection'; /**
    * Define resource model
    *
    * @return void
    */
    protected function _construct()
    {
    $this->_init('Mageplaza\HelloWorld\Model\Post', 'Mageplaza\HelloWorld\Model\ResourceModel\Post');
    } }

      CRUD集合类必须从函数中扩展\Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection并调用_init()方法来初始化模型,资源模型_construct()。

  5. 工厂对象 
    我们完成了创建数据库表CRUD模型资源模型和集合。那么如何使用它们?

    在OOP中,将使用工厂方法来实例化对象。在Magento中,Factory Object也做同样的事情。

    Factory类名称是Model类的名称,并附加“Factory”字样。所以对于我们的例子,我们将有PostFactory类。您不能创建此类。Magento将为您创造它。每当Magento的对象管理器遇到以“Factory”结尾的类名时,如果该类尚不存在,它将自动在var / generation文件夹中生成Factory类。你会看到工厂类

    var/generation/<vendor_name>/<module_name>/Model/ClassFactory.php
    

      
    在这种情况下,它将是:

    var/generation/Mageplaza/HelloWorld/Model/PostFactory.php
    

      

    要实例化模型对象,我们将使用自动构造函数依赖项注入来注入工厂对象,然后使用工厂对象来实例化模型对象。

    例如,我们将调用模型来获取控制器中的数据。

    app/code/Mageplaza/HelloWorld/Controller/Index/Index.php
    <?php
    namespace Mageplaza\HelloWorld\Controller\Index; class Index extends \Magento\Framework\App\Action\Action
    {
    protected $_pageFactory; protected $_postFactory; public function __construct(
    \Magento\Framework\App\Action\Context $context,
    \Magento\Framework\View\Result\PageFactory $pageFactory,
    \Mageplaza\HelloWorld\Model\PostFactory $postFactory
    )
    {
    $this->_pageFactory = $pageFactory;
    $this->_postFactory = $postFactory;
    return parent::__construct($context);
    } public function execute()
    {
    $post = $this->_postFactory->create();
    $collection = $post->getCollection();
    foreach($collection as $item){
    echo "<pre>";
    print_r($item->getData());
    echo "</pre>";
    }
    exit();
    return $this->_pageFactory->create();
    }
    }

      

    正如您在此控制器中看到的,将在_construct()函数中创建PostFactory对象。

    在execute()函数中,我们$post = $this->_postFactory->create();用来创建模型对象。

  6. 数据对象模型
    /vendor/magento/framework/DataObject.php
    

      

  7. -

Magento CURD的更多相关文章

  1. magento CURD操作

    查询: $model = Mage::getModel('mynews/mynews'); $collection = $model->getCollection(); $collection- ...

  2. 通过Http接口及SolrNet 两种方法基于Solr5.5.1 实现CURD

    前言 老规矩,任何技术的入门我通常都会总结增删改查,本文我就通过HttpWebRequest和SolrNet的方式实现Solr最基础的增删改查(CURD).对于自己的完整项目,同时不想过于依赖第三方类 ...

  3. Yii框架CURD方法

    在YII框架中,CURD有2种方式: 1.AR模式:2. DAO模式 AR模式下 查全部   MODEL  $model->find()->asArray()->all()查单 个  ...

  4. Mongodb 数据类型及Mongoose常用CURD

    前言 看完了Node.js实战,其中在数据存储部分提到了Redis.Mongodb,我自己也根据书中的介绍写了几个简单的demo,在demo的过程首先遇到的问题就是数据类型和常见的CURD写法. mo ...

  5. Angularjs CURD

    前言 基于一个手机端的项目使用了angularjs,硬着头皮去用,有很多的疑问还需要一一去验证,刚开始总是感觉找不到北,总是感觉有很多概念,而且似乎ng既夹杂MVC又夹杂MVVM的思想, 忙里偷闲敲了 ...

  6. ThinkPHP3快速入门教程二:数据CURD

    CURD(创建[Create].更新[Updata].读取[Read].删除[Delete]),定义了用于处理数据的基本原子操作. CURD在具体的应用中并非一定使用create.updata.rea ...

  7. MongoDB学习笔记~自己封装的Curd操作(按需更新的先决条件)

    回到目录 我们上一讲中介绍了大叔封装的Mongo仓储,其中介绍了几个不错的curd操作,而对于按需更新内部子对象,它是有条件的,即你的子对象不能为null,也就是说,我们在建立主对象时,应该为子对象赋 ...

  8. LNMP环境magento常见错误

    一.安装报404错误 git clone 下最新代码,跳转到index/install 安装时出现404错误 需要把伪静态规则加到nginx配置文件中: # # The default server ...

  9. Magento 新增字段的值读写丢失原因

    某实体新增字段handreturn_status,欲操作之: $order_info = Mage::getModel('sales/order')->load($order_id); //se ...

随机推荐

  1. 使用 empApi 组件实现 Change Data Capture 功能

    Change Data Capture 功能是从 Winter '19 版本开始正式启用的功能. 它是基于"发布-订阅"模式设计,可以将 Salesforce 中记录的改变自动推送 ...

  2. CGI 、FastCGI、PHP-CGI、PHP-FPM 定义以及与nginx的应用关系

    CGI common gateway interface,简称cgi,简而言之就是一个接口,一种协议.它的作用就是帮助服务器与语言通信. 这里以nginx和php为例,因为nginx和php的语言不通 ...

  3. C#基础第二天

    变量 声明的语法格式 数据类型 变量名; 常用数据类型 int  整数  值类型 double  小数  值类型 char  字符  引用类型 string 字符串 引用类型 decimal  金钱小 ...

  4. Python运算符之翩若惊鸿,婉若游龙

    python中的运算符算术运算符:主要用于两个对象算数计算(加减乘除等运算)比较运算符:用于两个对象比较(判断是否相等.大于等运算)赋值运算符:用于对象的赋值,将运算符右边的值(或计算结果)赋给运算符 ...

  5. 本地系统服务例程:Nt和Zw系列函数

    Windows本地操作系统服务API由一系列以Nt或Zw为前缀的函数实现的,这些函数以内核模式运行,内核驱动可以直接调用这些函数,而用户层程序只能通过系统进行调用.通常情况下用户层应用程序不会直接调用 ...

  6. Ubuntu 16.04 使用校园网客户端上网

    对于使用校园网的学生来说,安装好Ubuntu之后,很多人需要用 DrClient 客户端来上网,那么怎么操作呢, 这里介绍 DrClient 客户端在Ubuntu上的使用方法, 首先下载 对应版本的软 ...

  7. Bootstrap -- 网格系统、排版样式类、 <blockquote>、 <abbr> 元素

    Bootstrap -- 网格系统.排版样式类. <blockquote>. <abbr> 元素 1. Bootstrap 提供了一套响应式.移动设备优先的流式网格系统,随着屏 ...

  8. JavaScript对象类型之简单介绍

    引言 对象是JavaScript的基本数据类型. 对象是一种复合值:将很多值(原始值或者其他对象)聚合在一起,通过名字访问这些值. 对象可以看做属性的无序集合,每个属性都是一个名/值对.属性名是字符串 ...

  9. vi命令下常用命令

    dd:删除游标所在的一整行(常用)ndd:n为数字.删除光标所在的向下n行,例如20dd则是删除光标所在的向下20行d1G:删除光标所在到第一行的所有数据dG:删除光标所在到最后一行的所有数据d$:删 ...

  10. MySQL 5.7.13 的一个BUG

    mysql今天从5.6切到5.7,在测试环境中,日志是全部打印的,发现打了一个警告: Incorrect string value: '\xD6\xD0\xB9\xFA\xB1\xEA...' for ...